为什么PHP转换为'+';即使在使用%2B转义URL时也要将其发送到空间?
我似乎无法将“+”符号传递给php文件(index.php),即使我正确地转义了它。为了调试这个问题,我设置了一个测试文件(test.php) 我正在使用mod_rewrite对不起作用的文件进行重写,因此可能与此相关 调用/test.php?z=1%2B2我得到:为什么PHP转换为'+';即使在使用%2B转义URL时也要将其发送到空间?,php,mod-rewrite,escaping,Php,Mod Rewrite,Escaping,我似乎无法将“+”符号传递给php文件(index.php),即使我正确地转义了它。为了调试这个问题,我设置了一个测试文件(test.php) 我正在使用mod_rewrite对不起作用的文件进行重写,因此可能与此相关 调用/test.php?z=1%2B2我得到: ["z"]=> string(3) "1+2" ["z"]=> string(3) "1 2" 呼叫/1%2B2我收到: ["z"]=> string(3) "1+2" ["z"]=> string(3
["z"]=> string(3) "1+2"
["z"]=> string(3) "1 2"
呼叫/1%2B2我收到:
["z"]=> string(3) "1+2"
["z"]=> string(3) "1 2"
.htaccess文件将最后一行重定向到index.php。它包含以下内容:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mywebsite.com$ [NC]
RewriteRule ^(.*)$ http://www.mywebsite.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^index\.php
RewriteRule ^.* index.php?z=%{REQUEST_URI}
php_flag magic_quotes_gpc Off
php_flag display_errors Off
AddHandler php5-script .php
有什么想法吗?您不能通过url传递“+”字符。
唯一的方法是在将该字符传递到url之前用另一个字符替换该字符,然后用“+”替换该字符:
mod_rewrite必须在映射URL之前取消对URL的扫描,因此反向引用在应用它们时将取消扫描。使用B标志,将对反向引用中的非字母数字字符进行转义
在我的测试机上运行良好
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^index\.php
RewriteRule ^(.*)$ index.php?z=$1 [B]
但是我没有用
%{REQUEST_URI}
..测试它,在遇到与soulkphp相同的问题并且没有找到解决方法之后,上面的答案对我有效。这很有效。它不适用于%{REQUEST_URI}
,因为它已经被取消了越界,而[B]
只会转义反向引用($1
)。太棒了,谢谢。我知道mod_rewrite出于某种原因正在逃离我的URI,但我不明白为什么。