Câu trả lời:
Vấn đề chính là trình duyệt thậm chí sẽ không gửi yêu cầu với một phần. Phần phân đoạn được giải quyết ngay trong trình duyệt. Vì vậy, nó có thể truy cập thông qua JavaScript.
Dù sao, bạn có thể phân tích URL thành các bit, bao gồm cả phần phân đoạn, sử dụng parse_url () , nhưng rõ ràng đó không phải là trường hợp của bạn.
Kiểm tra đơn giản, truy cập http: // localhost: 8000 / hello? Foo = bar # this-is-not-sent-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 -
Máy chủ nhận được yêu cầu mà không cần #appendage - bất cứ điều gì sau thẻ băm chỉ đơn giản là tra cứu neo trên máy khách.
Bạn có thể tìm thấy tên neo được sử dụng trong URL thông qua javascript bằng cách sử dụng, làm ví dụ:
<script>alert(window.location.hash);</script>
Hàm parse_url () trong PHP có thể hoạt động nếu bạn đã có chuỗi URL cần thiết bao gồm cả đoạn ( http://codepad.org/BDqjtXix ):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Nhưng tôi không nghĩ PHP nhận được thông tin phân đoạn vì nó chỉ dành cho khách hàng.
Nó có thể truy xuất từ Javascript - như window.location.hash
. Từ đó, bạn có thể gửi nó đến máy chủ với Ajax chẳng hạn, hoặc mã hóa nó và đặt nó vào các URL mà sau đó có thể được chuyển qua phía máy chủ.
Băm không bao giờ được gửi đến máy chủ, vì vậy không.
Đúng vậy, máy chủ không nhận được phần neo. Tuy nhiên, có một cách giải quyết bằng cách sử dụng cookie. Bạn có thể tìm thấy nó ở đây: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
Câu trả lời là không.
Mục đích chính của hàm băm là cuộn đến một phần nhất định của trang nơi bạn đã xác định dấu trang. ví dụ: Di chuyển đến Phần này khi tải trang.
Trình duyệt sẽ cuộn sao cho dòng này là nội dung hiển thị đầu tiên trong trang, tùy thuộc vào số lượng nội dung theo sau dòng.
Có javascript có thể gia nhập nó, và sau đó một cuộc gọi ajax đơn giản sẽ làm nên điều kỳ diệu
Thế còn:
Tự động lấy #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;
?>
Để làm cho nó trôi chảy hơn:
Ví dụ đầy đủ chỉ sử dụng Javascript và 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; ?>
Tôi nghĩ rằng giá trị băm chỉ được sử dụng phía máy khách, vì vậy bạn không thể lấy nó bằng php.
bạn có thể chuyển hướng nó bằng javascript sang php.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
Đây là công việc nên làm
Phần của một URI sau #
được gọi là "đoạn" và theo định nghĩa chỉ có sẵn / được xử lý ở phía máy khách (xem https://en.wikipedia.org/wiki/Fragment_identifier ).
Về phía khách hàng, điều này có thể được truy cập bằng javaScript với window.location.hash
.
Có bạn có thể:
Sử dụng phương pháp này để ngăn ngừa lỗi:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
Và tất nhiên trong PHP, nổ tung con chó con đó và nhận được một trong những giá trị
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Một giải pháp khác là thêm một trường đầu vào ẩn vào trang php:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
Sử dụng javascript / jQuery, bạn có thể đặt giá trị của trường này khi tải trang hoặc trả lời một sự kiện:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
Trong php ở phía máy chủ, bạn có thể đọc giá trị này bằng cách sử dụng bộ sưu tập $ _POST:
$server_location_hash = $_POST['myHiddenLocationHash'];
Chúng ta cũng có thể làm điều đó với một cách tiếp cận khác, Giống như trước hết hãy lấy giá trị băm từ js và gọi ajax bằng tham số đó và có thể làm bất cứ điều gì chúng ta muốn
www.example.com/?val=1#part2
Bạn phải chuyển hướng đến nó trên máy chủ, như thế này:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
và tất nhiên bạn phải thêm hỗ trợ để chuyển hướng đến url khác trong trang khác của bạn. Không tuyệt vời, và tất nhiên không hoạt động cho tất cả các trường hợp sử dụng, nhưng không hoạt động cho dấu trang. Lưu ý rằng nếu bạn làm điều này, bạn không nên cho phép chuyển hướng đến các url tuyệt đối, chỉ các url tương đối, để đảm bảo bạn không mở ra các chuyển hướng không an toàn