สมมติว่า URL ของ:
www.example.com/?val=1#part2
PHP สามารถอ่านตัวแปรคำขอval1
โดยใช้อาร์เรย์ GET
ค่าแฮชpart2
สามารถอ่านได้ด้วยหรือไม่ หรือมากกว่าเบราว์เซอร์และ JavaScript เท่านั้นหรือไม่
สมมติว่า URL ของ:
www.example.com/?val=1#part2
PHP สามารถอ่านตัวแปรคำขอval1
โดยใช้อาร์เรย์ GET
ค่าแฮชpart2
สามารถอ่านได้ด้วยหรือไม่ หรือมากกว่าเบราว์เซอร์และ JavaScript เท่านั้นหรือไม่
คำตอบ:
ปัญหาหลักคือเบราว์เซอร์จะไม่ส่งคำขอที่มีส่วนย่อย ส่วนของแฟรกเมนต์ได้รับการแก้ไขตรงนั้นในเบราว์เซอร์ ดังนั้นจึงสามารถเข้าถึงได้ผ่าน JavaScript
อย่างไรก็ตามคุณสามารถแยก URL เป็นบิตรวมถึงส่วนแฟรกเมนต์โดยใช้parse_url ()แต่ก็ไม่ใช่กรณีของคุณ
ทดสอบอย่างง่ายโดยเข้าถึงhttp: // localhost: 8000 / hello? foo = bar # this-is-not-send-to-server
python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -
เซิร์ฟเวอร์ได้รับการร้องขอโดยไม่มี #appendage - อะไรก็ได้หลังจากแท็กแฮชเป็นเพียงการค้นหาจุดยึดบนไคลเอ็นต์
คุณสามารถค้นหาชื่อสมอที่ใช้ภายใน URL ผ่านทางจาวาสคริปต์โดยใช้ตัวอย่าง:
<script>alert(window.location.hash);</script>
ฟังก์ชัน parse_url () ใน PHP สามารถทำงานได้หากคุณมีสตริง URL ที่ต้องการอยู่แล้วรวมถึงส่วน ( http://codepad.org/BDqjtXix ):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
แต่ฉันไม่คิดว่า PHP ได้รับข้อมูลส่วนเพราะเป็นลูกค้าเท่านั้น
มันเป็นเอากลับคืนจาก Javascript - window.location.hash
เป็น จากตรงนั้นคุณสามารถส่งไปยังเซิร์ฟเวอร์ที่มี Ajax หรือเข้ารหัสแล้วใส่ลงใน URL ซึ่งสามารถส่งผ่านไปยังฝั่งเซิร์ฟเวอร์
แฮชจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ดังนั้นไม่
ใช่มันเป็นความจริงเซิร์ฟเวอร์ไม่ได้รับส่วนยึด อย่างไรก็ตามมีวิธีแก้ไขปัญหาโดยใช้คุกกี้ คุณสามารถค้นหาได้ที่นี่: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
คำตอบคือไม่
วัตถุประสงค์หลักของการแฮชคือเพื่อเลื่อนไปยังส่วนหนึ่งของหน้าเว็บที่คุณกำหนดบุ๊คมาร์คไว้ เช่นเลื่อนไปที่ส่วนนี้เมื่อโหลดหน้าเว็บ
การเรียกดูจะเลื่อนเพื่อให้บรรทัดนี้เป็นเนื้อหาแรกที่มองเห็นได้ในหน้าทั้งนี้ขึ้นอยู่กับจำนวนเนื้อหาที่อยู่ด้านล่างบรรทัด
ใช่จาวาสคริปต์สามารถ acces มันและจากนั้นโทร ajax ง่ายจะทำมายากล
เกี่ยวกับ:
คว้า #hash แบบไดนามิก
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
//alert(txthash);
</script>
<?php
$hash = "<script>document.writeln(txthash);</script>";
echo $hash;
?>
เพื่อให้คล่องขึ้น:
ตัวอย่างแบบเต็มโดยใช้เพียง Javascript และ PHP
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
function changehash(a,b){
window.location.hash = b; //add hash to url
//alert(b); //alert to test
location.reload(); //reload page to show the current hash
}
</script>
<?php $hash = "<script>document.writeln(txthash);</script>";?>
<a onclick="changehash(this,'#hash1')" style="text-decoration: underline;cursor: pointer;" >Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')" style="text-decoration: underline;cursor: pointer;">Change to #hash2</a><br/>
<?php echo "This is the current hash: " . $hash; ?>
ฉันคิดว่าค่าแฮชนั้นใช้กับฝั่งไคลเอ็นต์เท่านั้นดังนั้นคุณจึงไม่สามารถใช้ php ได้
คุณสามารถเปลี่ยนเส้นทางด้วย javascript ไปยัง php ได้
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
มันควรจะใช้ได้
ส่วนหนึ่งของURIหลังจากที่#
เรียกว่า "แฟรกเมนต์" และเป็นคำจำกัดความพร้อมใช้งาน / ประมวลผลทางฝั่งไคลเอ็นต์เท่านั้น (ดูhttps://en.wikipedia.org/wiki/Fragment_identifier )
บนฝั่งไคลเอ็นต์นี้สามารถเข้าถึงได้โดยใช้ JavaScript window.location.hash
กับ
ใช่คุณสามารถ:
ใช้วิธีนี้เพื่อป้องกันข้อผิดพลาด:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
และแน่นอนใน PHP ระเบิดลูกสุนัขตัวนั้นและรับค่าใดค่าหนึ่ง
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
อีกวิธีคือการเพิ่มช่องอินพุตที่ซ่อนอยู่ในหน้า php
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
การใช้ javascript / jQuery คุณสามารถกำหนดค่าของฟิลด์นี้ในการโหลดหน้าเว็บหรือตอบสนองต่อเหตุการณ์:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
ใน php บนฝั่งเซิร์ฟเวอร์คุณสามารถอ่านค่านี้โดยใช้คอลเลกชัน $ _POST:
$server_location_hash = $_POST['myHiddenLocationHash'];
เราสามารถทำได้ด้วยวิธีอื่นเช่นกันก่อนอื่นรับค่าแฮจาก js และเรียก ajax โดยใช้พารามิเตอร์นั้น
www.example.com/?val=1#part2
คุณต้องเปลี่ยนเส้นทางไปที่เซิร์ฟเวอร์เช่นนี้www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
และแน่นอนคุณต้องเพิ่มการสนับสนุนเพื่อเปลี่ยนเส้นทางไปยัง URL อื่นในหน้าอื่น ๆ ของคุณ ไม่น่ากลัวและใช้ไม่ได้กับทุกกรณีการใช้งาน แต่ทำงานได้กับบุ๊กมาร์ก โปรดทราบว่าหากคุณทำเช่นนี้คุณไม่ควรอนุญาตให้เปลี่ยนเส้นทางไปยัง URL แบบสัมบูรณ์ซึ่งเป็นเพียง URL แบบสัมพัทธ์เท่านั้นเพื่อให้แน่ใจว่าคุณไม่ได้เปิดรับการเปลี่ยนเส้นทางที่ไม่ปลอดภัย