假设URL为:
www.example.com/?val=1#part2
PHP可以使用GET数组读取请求变量val1。
哈希值part2也是可读的吗?或者这仅仅取决于浏览器和JavaScript?
假设URL为:
www.example.com/?val=1#part2
PHP可以使用GET数组读取请求变量val1。
哈希值part2也是可读的吗?或者这仅仅取决于浏览器和JavaScript?
当前回答
主要的问题是浏览器甚至不会发送带有片段部分的请求。片段部分在浏览器中被解析。它可以通过JavaScript访问。
无论如何,您可以使用parse_url()将URL解析为位,包括片段部分,但这显然不是您的情况。
其他回答
URI中#后面的部分被称为“片段”,根据定义,仅在客户端可用/处理(参见https://en.wikipedia.org/wiki/Fragment_identifier)。
在客户端,可以使用带有window.location.hash的javaScript进行访问。
另一个解决方案是在php页面中添加一个隐藏的输入字段:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
使用javascript/jQuery,你可以在页面加载或响应事件时设置该字段的值:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
在php的服务器端,你可以使用$_POST集合读取这个值:
$server_location_hash = $_POST['myHiddenLocationHash'];
简单的测试,访问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>
PHP中的parse_url()函数可以工作,如果您已经有了所需的URL字符串,包括片段(http://codepad.org/BDqjtXix):)
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
但我认为PHP不会接收片段信息,因为它是客户机专用的。
我认为哈希值只在客户端使用,所以在php中无法获得。
你可以用javascript重定向到PHP。
是的,你可以:
使用此方法可以防止错误:
<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