使用以下网址:http://any.php?name=M&M's
PHP的$_GET
变量为array('name' => 'M', 'M\s' => '')
。
有没有办法让PHP忽略那些未转义的&符号?
------ 早期问题(导致上述问题)------
大家好,
使用像这样的mod_rewrite规则......
RewriteRule ^wiki/([A-Za-z0-9_,+&'\-\)\(]+)$ php/data.php?name=$1 [L,NC]
这样的链接(用纯文本,即M& M's)......
http://any.com/wiki/M%26M%27s
我从data.php ...
得到这个 <?php echo 'Name:'. $_GET['name']; ?>
Name: M
其他名字怎么了?
谢谢!
答案 0 :(得分:0)
我不知道这是否有帮助,但您确定需要范围表达式中的反斜杠吗?通常你不需要在那里转义括号(它们永远不合法),并且你也不会逃脱连字符:你把它包含在第一个或最后一个位置。所以你的行将是:
RewriteRule ^wiki/([-A-Za-z0-9_,+&')(]+)$ php/data.php?name=$1 [L,NC]
而且,再一次,我不知道mod_rewrite,所以我只是在黑暗中进行两次刺伤但是:
答案 1 :(得分:0)
所以我做了一些测试,看起来像PHP的错!
首先,在运行重写规则之前,mod_rewrite似乎对任何字符进行解码。如果我从我的正则表达式的字符类中删除“$”和“'”(或者像Steve建议的那样添加“%”),我会收到404错误。因此,我的RewriteRule的语法和mod_rewrite看起来越来越好(特别是在像Steve建议的那样清理之后)。
如果我转储页面的$_GET
变量,我会看到:
<?php var_dump($_GET); ?>
array(2) { ["name"]=> string(8) "Almond_M" ["M\'s"]=> string(0) "" }
哈!这是一个PHP问题!所以现在的问题是,如何让PHP忽略未转义的&符号(我希望保持它不会转义,因此对用户来说看起来很漂亮)。