我可以在服务器端应用程序(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'];