Answers:
主要问题是浏览器甚至不会发送带有片段部分的请求。片段部分在浏览器中已解决。因此可以通过JavaScript到达。
无论如何,您可以使用parse_url()将URL解析为包括片段部分在内的位,但这显然不是您的情况。
简单测试,访问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 -
服务器接收到的请求没有#附录-哈希标记只是客户端上的锚查找之后的所有内容。
您可以通过javascript找到URL中使用的锚点名称,例如:
<script>alert(window.location.hash);</script>
如果您已经具有所需的URL字符串(包括片段(http://codepad.org/BDqjtXix)),则PHP中的parse_url()函数可以正常工作:
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
但是我认为PHP不会接收片段信息,因为它仅用于客户端。
可从Javascript-as检索window.location.hash
。从那里,您可以将其发送到例如带有Ajax的服务器,或者对其进行编码并将其放入URL中,然后可以将其传递到服务器端。
哈希永远不会发送到服务器,所以不会。
是的,这是真的,服务器没有锚点。但是,有一种使用cookie的解决方法。您可以在这里找到它:http : //www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
关于什么:
动态抓取#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
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
这应该工作
URI之后的URI部分#
称为“片段”,根据定义,该部分仅在客户端可用/处理(请参阅https://en.wikipedia.org/wiki/Fragment_identifier)。
在客户端,可以使用javaScript和进行访问window.location.hash
。
另一种解决方案是在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,以确保您不会对不安全的重定向