【问题标题】:getting the full url including the query string after hash获取完整的 url,包括哈希后的查询字符串
【发布时间】:2013-11-29 07:10:45
【问题描述】:

如何获取完整的URL,包括hash tag之后的字符串参数?我尝试回应

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

hash tag 后面的字符串不会被读取。

【问题讨论】:

  • 那部分永远不会到达服务器,它是浏览器独有的。
  • @Pekka웃 很好的答案;)。您可以使用 js 函数并将其传递给其他作品。这是一个像你的问题一样的问题。 stackoverflow.com/questions/12469350/…
  • @Pekka웃 所以即使我使用encodeURIComponent(),浏览器仍然会忽略%23之后的所有内容?

标签: php url hashtag


【解决方案1】:

Pekka 的评论应该是一个答案。 hash标签后面的字符串参数不发送到服务器,仅供浏览器使用。

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

理想情况下,

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

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

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

【讨论】:

  • +1,很好的答案! #inbox 中的 https://mail.google.com/mail/u/1/#inbox 也是 fragment identifier 和客户信息吗?
  • 蒂姆:很好的发现,我会添加它!
  • #inbox in https://mail.google.com/mail/u/0/#inbox 是一种无需刷新页面即可在页面之间导航的方法吗?它是在服务器还是客户端(网络浏览器)上实现的?
  • 蒂姆:你读过你自己的链接吗? :) 片段标识符应该只在客户端使用(尽管脚本可以改变这一点)。在过去,它经常使用锚点在页面内导航。如今,它被(重新)用于类似目的,例如动态加载内容的单页网站。
【解决方案2】:

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

如果你真的需要知道哈希是什么,你必须使用 document.location.hash JavaScript 属性,它包含哈希的内容(然后你可以将它插入到表单中,或者将它发送到带有ajax 请求的服务器)。您可以使用将URL 发送到Ajax 端点的Javascript onload function 传递完整的URL,包括锚点(# 之后的部分)。

你也可以看这里Get entire URL, including query string and anchor

【讨论】:

    【解决方案3】:

    使用urlencode()urldecode() 函数

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

    首先对链接按钮中的Hash值进行编码

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      相关资源
      最近更新 更多