2011-11-10 23 views
1

我似乎無法將'+'符號傳遞給PHP文件(index.php),即使我正確地轉義它。爲了調試問題,我設置了一個測試文件(test.php)。即使使用%2B轉義URL,PHP爲什麼會將'+'轉換爲空格?

我正在使用mod_rewrite和不起作用的文件,因此可能是相關的。

調用/test.php?z=1%2B2我得到:

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

呼叫/ 1%2B2我得到:

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

.htaccess文件重定向最後一行指數.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 

任何想法?

回答

3

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

mod_rewrite的具有映射他們之前未逸出的網址,所以反向引用將它們應用的時間來轉義。使用B標誌,在反向引用非字母數字字符將被轉義

工作正常,我的測試機上

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

,但還沒有與%{REQUEST_URI}測試它...

+0

這個作品。它不適用於'%{REQUEST_URI}'因爲它已經被轉義了,'[B]'只能轉義反向引用('$ 1')。 – mercator

+0

輝煌,謝謝。我知道mod_rewrite出於某種原因逃離了我的URI,但我無法弄清楚原因。 – soulkphp

0

您不能通過url傳遞「+」字符。 唯一的方法是在將其傳遞給url之前用另一個替換另一個字符,然後用「+」替換它。

+0

有趣。引文? – Drew

+0

在遇到與soulkphp相同的問題並且找不到解決方法之後,上面的答案適用於我。 – Khronos

+0

參考你自己的失敗嘗試幾乎是一個引用... –

相關問題