Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么PHP转换为'+';即使在使用%2B转义URL时也要将其发送到空间?_Php_Mod Rewrite_Escaping - Fatal编程技术网

为什么PHP转换为'+';即使在使用%2B转义URL时也要将其发送到空间?

为什么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

我似乎无法将“+”符号传递给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) "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,但我不明白为什么。