http - 我可以在服务器端应用程序(PHP,Ruby,Python等)上读取URL的哈希部分吗?
假设URL为:
www.example.com/?val=1#part2
PHP可以使用GET数组读取请求变量part2。
哈希值part2也可读吗? 或者这只是浏览器和JavaScript?
12个解决方案
191 votes
主要问题是浏览器甚至不会发送带有片段部分的请求。 片段部分在浏览器中解析。 所以它可以通过JavaScript访问。
无论如何,您可以使用parse_url()将URL解析为位,包括片段部分,但显然不是您的情况。
Ionuț G. Stan answered 2019-03-15T22:53:03Z
95 votes
简单测试,访问[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 -
服务器在没有#appendage的情况下接收请求 - 在哈希标记之后的任何内容都只是客户端上的锚点查找。
您可以通过javascript使用URL中找到锚名称,例如:
如果您已经拥有包含片段所需的URL字符串([http://codepad.org/BDqjtXix]:],PHP中的parse_url()函数可以工作
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
但我不认为PHP接收片段信息,因为它只是客户端。
tom answered 2019-03-15T22:53:54Z
48 votes
它可以从Javascript中检索 - 如window.location.hash.从那里你可以用Ajax将它发送到服务器,或者编码并将其放入URL然后可以传递到服务器端。
Alister Bulman answered 2019-03-15T22:54:18Z
25 votes
哈希从不发送到服务器,所以没有。
PatrikAkerstrand answered 2019-03-15T22:54:42Z
8 votes
是的,这是真的,服务器没有获得锚点部分。 但是有一种使用cookie的解决方法。 你可以在这里找到它:[http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/]
VangelisB answered 2019-03-15T22:55:06Z
7 votes
答案是不。
哈希的主要目的是滚动到已定义书签的页面的某个部分。 例如 页面加载时滚动到此部分。
浏览将滚动,使得此行是页面中的第一个可见内容,具体取决于该行下方有多少内容。
是的,javascript可以访问它,然后一个简单的ajax调用将发挥魔力
Qiniso Mdletshe answered 2019-03-15T22:55:46Z
3 votes
我认为哈希值只用于客户端,所以你无法用php获取它。
你可以用javascript将它重定向到php。
Silfverstrom answered 2019-03-15T22:56:16Z
2 votes
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
这应该工作
Keshav Kalra answered 2019-03-15T22:56:41Z
1 votes
window.location.hash之后的部分URI称为“片段”,根据定义,仅在客户端可用/处理(参见[https://en.wikipedia.org/wiki/Fragment_identifier])。
在客户端,可以使用带有window.location.hash的javaScript访问它。
MrTux answered 2019-03-15T22:57:13Z
1 votes
是的你可以:
使用此方法可以防止错误:
query=location.hash;
document.cookie= 'anchor'+query;
当然在PHP中,爆炸那只小狗并获得其中一个值
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Aurora answered 2019-03-15T22:57:45Z
0 votes
我们也可以用另一种方法来做,就像首先从js获取哈希值并使用该参数调用ajax并且可以做任何我们想做的事情
Keshav Kalra answered 2019-03-15T22:58:10Z
-1 votes
另一种解决方案是在php页面中添加一个隐藏的输入字段:
使用javascript / jQuery,您可以在页面加载或响应事件时设置此字段的值:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
在服务器端的php中,您可以使用$ _POST集合读取此值:
$server_location_hash = $_POST['myHiddenLocationHash'];
Matteo Conta answered 2019-03-15T22:58:47Z