在哈希之后获取包含查询字符串的完整URL

时间:2013-11-29 07:10:46

标签: php url hashtag

如何在URL之后获取包含字符串参数的完整hash tag?我试着回应

$url = $_SERVER['REQUEST_URI'];
echo $url;

hash tag之后的字符串。

3 个答案:

答案 0 :(得分:9)

佩卡的评论应该是一个答案。 哈希标记之后的字符串参数未发送到服务器,仅适用于浏览器眼睛。

这意味着服务器端代码(在您的情况下为PHP)没有此信息。客户端代码(浏览器,javascript,...)可以。

理想地,

  • 之后的部分? 服务器信息。把你的一切 服务器需要在这里
  • #之后的部分是客户的信息。把你的一切 客户需要这里。它被称为Fragment Identifier(谢谢Tim)。

历史上,#之后的部分最常用于让您的浏览器快速滚动到页面上定义的锚点。如今,它更常用于保存客户的状态信息。

您可以让javascript将此信息发送到服务器,或根据此信息执行不同的操作。 AJAX是你的朋友。

答案 1 :(得分:1)

哈希(包含#的字符串)永远不会传递给服务器,它只是浏览器的行为属性。 $_SERVER['REQUEST_URI']变量将包含其余部分。

如果您确实需要知道哈希是什么,则必须使用document.location.hash JavaScript属性,该属性包含哈希的内容(然后您可以将其插入表单中,或者使用ajax请求将其发送到服务器。您可以使用发送Javascript onload function的{​​{1}}来传递完整的网址,包括锚点(#后面的部分) URL端点。

您还可以在此处查看Get entire URL, including query string and anchor

答案 2 :(得分:0)

使用urlencode()urldecode()函数

在这个简短的示例中,我将向您展示如何将哈希值传递给服务器,并使它重定向到哈希值。

首先在链接按钮中编码哈希值

<a href="mylink.php?redirect=link1<?= urlencode("#tab5") ?>">redirect to Link1 </a>

现在从服务器重定向到链接 mylink.php

if ($_GET["redirect"] != null )
    {
        header("location: urldecode($_GET["redirect"]);
    }