php 获取当前url hash,http - 我可以在服务器端应用程序(PHP,Ruby,Python等)上读取URL的哈希部分吗?...

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值