即使使用urlencode,数据也会在URL中的&符号后被删除

时间:2011-03-15 19:17:55

标签: php mod-rewrite urlencode

我在传入请求的网址中传递&符号

e.g。

http://www.soundshelter.co.uk/label/Hit & Run

我曾尝试过urlencode&这样它就是一个有效的URL

http://www.soundshelter.co.uk/label/Hit%20%26%20Run

但是在get请求中,URL的& Run部分被截断了。

我认为这可能与我的mod_rewrite

有关
RewriteRule ^label/([^/]*)$ /index.php?label=$1 [NC]

获取请求是

$label = $_GET['label'];

有什么想法吗?

干杯

2 个答案:

答案 0 :(得分:3)

来自the documentation

  

'B'(逃避反向引用)

     

Apache必须在映射之前取消网址,因此反向引用会   在他们的时候被转义   应用。使用B标志,   中的非字母数字字符   反向引用将被转义。对于   例如,考虑规则:

 RewriteRule ^(.*)$ index.php?show=$1 
     

这会将/C++映射到index.php?show=/C++。但它也会   将/C%2b%2b映射到index.php?show=/C++,   因为%2b未被转义。   使用B标志,它将改为映射   到index.php?show=/C%2b%2b

     

这种转义在代理情况下尤为必要   如果出现,后端可能会中断   使用未转义的网址。

所以,试试:

RewriteRule ^label/([^/]*)$ /index.php?label=$1 [BNC]

此外,在访问您的页面后,我觉得您还有更多的PHP问题。我建议你发布更多代码上下文。

答案 1 :(得分:1)

尝试将重写规则更改为

RewriteRule ^label/([^/]*)$ /index.php?label=$0 [NC]