Почему PHP преобразует '+' в пробел, даже если экранирует URL с% 2B? - PullRequest
1 голос
/ 10 ноября 2011

Кажется, я не могу передать символ '+' в файл php (index.php), хотя я правильно его избегаю.Для устранения проблемы я настроил тестовый файл (test.php).

Я использую mod_rewrite с файлом, который не работает, поэтому может быть связан.

Вызов / тест.php? z = 1% 2B2 Я получаю:

["z"]=> string(3) "1+2"

Вызов / 1% 2B2 Я получаю:

["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

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

http://httpd.apache.org/docs/2.3/rewrite/flags.html#flag_b:

mod_rewrite должен удалить URL-адреса перед их сопоставлением, поэтому обратные ссылки не будут удалены во время их применения.Используя флаг B, не алфавитно-цифровые символы в обратных ссылках будут экранированы

Отлично работает на моем тестовом компьютере с

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^index\.php
RewriteRule ^(.*)$ index.php?z=$1 [B]

, но не проверял его с %{REQUEST_URI} ...

0 голосов
/ 10 ноября 2011

Вы не можете передать символ "+" через URL.Единственный способ - заменить символ другим, прежде чем передать его в URL, а затем заменить на «+».

...