有一個虛擬示例PHP應用程序,它顯示了導致我出現問題的原因。
PHP - urlencoded()&符號被認爲是實際&符號
<?PHP
echo ((isset($_GET['P'])) ? print_r($_GET) : "<a href='http://example.com/a.php?P=" . urlencode('One & Two') . "'>One & Two</a>");
?>
如果我們瀏覽網頁,而不P參數頁面將輸出:
http://example.com/One+%26+Two
這很好,但如果我們訪問鏈接,腳本將返回:
Array
(
[P] => One
[Two] =>
)
而且這顯然是錯誤的。
在實際應用中,url中提交了大約30個字符長的包含特殊字母(瑞典語)的字母數字字符串。
編輯:在我的實際應用中我使用URL重寫:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ ../example.php?s=$1 [L,QSA]
</IfModule>
可以是這樣的原因是什麼? - 確認。這是問題。請參閱下面的答案。
因此,我應該逃避通過urlencode逃脫的&符號?你甚至讀過完整的問題嗎? 無論如何,謝謝。 – xZero
你從來沒有說過你正在使用重寫。如果用% –
轉義它,你不需要使用urlencode這是一個巨大的項目,並且在兩個月前添加了url重寫,當項目啓動時,所以我完全忘了它。 在實際的應用程序中,URL中編碼比在示例中要多得多,所以手動編碼不是一種選擇。 – xZero