2010-10-27 58 views
1

使用PHP 5.3.2,我在與處理其名稱頁面的請求麻煩中有一個變音符:öPHP,urldecode()和元音 - Ø

製作使用的是Firefox請求+住HTTP標頭的test_ö_test.htm頁面,我可以看到Firefox會自動轉換/編碼變音符號時,它發出請求:

GET /test_%C3%B6_test.htm HTTP/1.1 

現在,使用http://meyerweb.com/eric/tools/dencoder/我能夠test_ö_test.htm和TEST_之間的編碼/解碼%C3%B6_test.htm,所以我認爲編碼是正確的。

使用PHP的urldecode(),我得到test_ö_test.htm

而討厭404返回。請注意,test_ö_test.htm確實存在於文件系統上。

當我用javascript的escape()測試時,我得到test_%F6_test.htm。當我將其插入瀏覽器時,我會成功返回內容頁面。 urldecode()將它變回變音符號。

+1

urldecode()是單字節,而%C3%B6似乎是多字節。無論如何,爲什麼不在服務器端編碼你的頁面名稱?或者,甚至更好,根本不使用擴展字符。 – 2010-10-27 01:20:27

+0

[URL解碼在PHP中]可能的重複(http://stackoverflow.com/questions/1756862/url-decoding-in-php) – 2010-10-27 01:21:27

+0

是的,這基本上是相同的問題 - 如果需要,很高興刪除此問題。 – starmonkey 2010-10-27 02:59:42

回答

2

您的頁面聲明爲ISO-8859-1,而您的數據是UTF-8編碼的。這導致瀏覽器嘗試將兩個字節的UTF-8序列0xc3 0xb6解釋爲兩個字符Latin-1序列「拉丁大寫字母A與傾斜」「PILCROW SIGN」。您的數據和頁面的內容編碼需要達成一致。

+0

感謝您的跟進 - 讚賞。 – starmonkey 2010-11-25 23:13:50