【发布时间】:2011-06-25 00:50:24
【问题描述】:
我有一个 PHP 项目,我需要在 URL 的路径中发送一个哈希字符 (#)。 (http://www.example.com/parameter#23/parameter#67/index.php) 我认为 urlencode 会允许这样做,将哈希转换为 %23
但现在我看到,即使是 urlencoded 哈希也会迫使浏览器将右侧的所有内容视为 URL 片段(或查询)。
有没有办法传递哈希,或者我需要在 urlencode 之前进行字符替换?
编辑添加(2017 年 9 月 19 日):
原来我问错了问题。我的问题不在于在路径中使用哈希字符(编码它确实有效),而是使用 mod_rewrite 将其转换为查询字符串。我未能在 RewriteRule 中重新编码它。我将编辑标题以匹配。
这是我使用的重写规则:
RewriteEngine On
# convert path strings into query strings
RewriteRule "^(.*)/(.*)/hashtags.php" /hashtags.php?parameter_1=$1&parameter_2=$2 [QSA,L]
只要我添加了 B 标签,它就可以正常工作:
RewriteEngine On
# convert path strings into query strings
RewriteRule "^(.*)/(.*)/hashtags.php" /hashtags.php?parameter_1=$1&parameter_2=$2 [QSA,L,B]
【问题讨论】:
-
您以什么方式使用该网址?
-
我相信 urlencode 应该把它改成 %23,你能提供一个示例代码吗?
-
我正在为动态创建的 PDF 创建静态链接。我正在使用 modrewrite 将路径元素传递给 $_GET。它们是创建 PDF 所需的产品参数。一些产品的产品名称中有井号标签。
-
哈希是一个保留字符,无论如何网页浏览器都会这样对待它。是否对其进行编码并不重要,因为解释将是相同的。还有其他角色可以使用吗?
-
Jeremy:是的,经过更多测试后,我意识到是浏览器在做这件事。如果我绕过浏览器并告诉 PHP 解释两个 URL(一个带有 urlencode,一个没有),它会完美地解析编码的 URL。在创建 URL 之前,我必须进行替换。谢谢!
标签: php apache mod-rewrite hash urlencode