我可以在服务器端应用程序(PHP,Ruby,Python等)上读取URL的散列部分吗?

假设URL为:

www.example.com/?val=1#part2 

PHP可以使用GET数组读取请求variablesval1

散列值part2是否可读? 或者这只是到浏览器和JavaScript?

主要的问题是浏览器甚至不会发送带有片段的请求。 片段部分在浏览器中解决。 所以它可以通过JavaScript访问。

无论如何,你可以使用parse_url()将一个URLparsing成包含片段的部分,但显然不是你的情况。

简单的testing,访问http:// localhost:8000 / hello?foo = bar#这不是发送到服务器

 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的情况下接收请求 – 在hash标签之后的任何东西只是客户端上的锚点查询。

作为一个例子,您可以通过javascript在URL中find锚名称:

 <script>alert(window.location.hash);</script> 

PHP中的parse_url()函数可以工作,如果你已经有了所需的URLstring,包括片段( http://codepad.org/BDqjtXix ):

 <? echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT); ?> Output: fizzbuzz 

但我不认为PHP收到片段信息,因为它只是客户端。

它可以从Javascript中检索 – 作为window.location.hash 。 从那里你可以用Ajax把它发送到服务器,或者把它编码到URL中,然后通过URL传递给服务器端。

散列永远不会发送到服务器,所以不。

是的,这是真的,服务器没有得到锚部分。 但是,有一个解决方法使用Cookie。 你可以在这里find它: http : //www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/

答案是不。

散列的主要目的是滚动到您定义了书签的页面的某个部分。 当页面加载时滚动到这个部分。

浏览器将滚动,以便该行是页面中的第一个可见内容,具体取决于该行下方的内容。

是的,JavaScript可以访问它,然后一个简单的Ajax调用会做到这一点

我认为散列值只用于客户端,所以你不能用PHP来获取它。

你可以redirect它与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 )。

在客户端,可以通过使用带有window.location.hash javaScript来访问。

是的你可以:

使用这种方法来防止错误:

 <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 

另一个解决scheme是添加一个隐藏的input字段到PHP页面:

 <input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value=""> 

使用javascript / jQuery,你可以在页面加载或响应一个事件时设置这个字段的值:

 $('#myHiddenLocationHash').val(document.location.hash.replace('#','')); 

在服务器端的PHP中,你可以使用$ _POST集合来读取这个值:

 $server_location_hash = $_POST['myHiddenLocationHash'];