【问题标题】:How to get hash(#) value in query string [duplicate]如何在查询字符串中获取哈希(#)值[重复]
【发布时间】:2016-07-02 17:55:47
【问题描述】:

我正在尝试在查询字符串中发布 # 参数,例如...

www.demo.php?tag=c#

现在我正在尝试在另一个页面中获取标签值

$_GET['tag']

但我没有以某种方式得到 # 价值不是与 $_GET 一起出现的。我只能得到“c”。

【问题讨论】:

标签: php


【解决方案1】:

哈希字符 (#) 在 URL 中具有特殊含义。它引入了fragment identifier。片段标识符通常用于定位页面内的某个位置。

片段标识符由浏览器处理,当浏览器向服务器发出 HTTP 请求时,它会从 URL 中删除。

作为一个特殊字符,如果你想让它有它的字面值,你必须对其进行编码。在您的问题中编写 URL 的正确方法是:

www.demo.php?tag=c%23

以这种方式编写时,$_GET['tag'] 包含正确的值 ('c#')。

如果您从 PHP 代码生成此类 URL(可能通过从数据库等外部资源获取 tag 的值),您必须使用 PHP 函数 urlencode() 正确编码您在 URL 中输入的值。或者,更好的是,创建一个包含所有 URL 参数及其值的数组,然后将其传递给 http_build_query() 以生成 URL:

$params = array(
   'tag'  => 'c#',
   'page' => 2,
);
$url = 'http://localhost/demo.php?'.http_build_query($params);

【讨论】:

  • 已经试过了。它不工作......
  • 加倍努力。它有效。
  • 实际上我已经用 htaccess 更改了我的 url 以获得干净的 url。喜欢localhost/demo/tag/c#
  • 可能我解释的不是很好。您不能# 未编码的URL 放在URL 中,如果您希望它是# 而不是别的东西。 ?%/&= 和其他几个字符也是如此。是否使用 URL 重写并不重要。我点击了您在评论中添加的链接。服务器回复 “在此服务器上找不到请求的 URL /demo/tag/c。”。看?如果不是URL-encoded,则没有# 到达服务器。还是不服气?在 StackOverflow 上搜索 c# 并检查您获得的(漂亮且干净的)URL。
  • Axiac,我没有问题使用像 www.demo.com/tag/c%23/ 这样的 url,但是当我尝试使用 $_GET['tag 在另一个页面上获取这个标签值时'],我只能看到 'c' 而不是 'c#' 或 'c%23'
猜你喜欢
  • 2013-08-28
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 2011-10-22
  • 2011-12-27
  • 2015-10-01
相关资源
最近更新 更多