【发布时间】:2016-07-02 17:55:47
【问题描述】:
我正在尝试在查询字符串中发布 # 参数,例如...
www.demo.php?tag=c#
现在我正在尝试在另一个页面中获取标签值
$_GET['tag']
但我没有以某种方式得到 # 价值不是与 $_GET 一起出现的。我只能得到“c”。
【问题讨论】:
标签: php
我正在尝试在查询字符串中发布 # 参数,例如...
www.demo.php?tag=c#
现在我正在尝试在另一个页面中获取标签值
$_GET['tag']
但我没有以某种方式得到 # 价值不是与 $_GET 一起出现的。我只能得到“c”。
【问题讨论】:
标签: php
哈希字符 (#) 在 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);
【讨论】:
# 未编码的URL 放在URL 中,如果您希望它是# 而不是别的东西。 ?、%、/、&、= 和其他几个字符也是如此。是否使用 URL 重写并不重要。我点击了您在评论中添加的链接。服务器回复 “在此服务器上找不到请求的 URL /demo/tag/c。”。看?如果不是URL-encoded,则没有# 到达服务器。还是不服气?在 StackOverflow 上搜索 c# 并检查您获得的(漂亮且干净的)URL。