所以,我遇到了PHP的rawurlencode函數的問題。我們的網絡應用程序中的所有文本字段在被網絡服務器處理之前當然會被轉換,並且我們已經使用了rawurlencode。對於我找到的幾乎每個角色都適用,期望獲得「£」符號。現在,我們的用戶沒有理由永遠輸入英鎊符號,但他們可能會這麼做,所以我想要照顧好這一點。(PHP)rawurlencode/decode似乎將'£'標記編碼爲''(%C2%A3而不是%A3)
問題是rawurlencode不會將網頁上輸入的英鎊符號編碼爲%A3,而是將其編碼爲%C2%A3。更糟糕的是,如果用戶未能輸入另一個關鍵信息(這會導致網頁刷新 - 檢查在後端完成 - 並嘗試使用用戶使用的信息重新填充表單框),那麼當%C2通過rawurldecode/encode運行,它變成了? - 又名%C3 ?.當然這個「£」也會變成另一個!
那麼,這是什麼原因造成的?我認爲這是一個字符編碼問題,但我不知道這些事情。我聽說某處我可以手動編碼爲&磅,但爲什麼我需要在數據庫可以處理「英鎊」時做這件事,並且英鎊符號有百分比編碼?這是rawurlencode中的錯誤,還是由不同字符集造成的錯誤?
感謝您的任何幫助。
因此,哪種方法更好 - 更改表單的字符集 - 請注意,我在w3schools上找到的屬性是accept-charset,而不是字符集 - 或者在代碼中使用iconv?我讀到IE顯然不能正確使用accept-charset,那麼將服務器端轉換爲UTF更好嗎? – Stephen 2010-07-13 13:30:55
@Stephen你說得對,它是「接受字符集」。我認爲最好在服務器端做,因爲標準並不能保證你不會得到UTF-8。更好的是,始終使用UTF-8,包括將數據存儲在數據庫中。國際海事組織,所有新的Web應用程序都應朝着這個方向前進。 – Artefacto 2010-07-13 15:43:50
@Stephen請注意,儘管這是標準,但仍有一些實現問題,特別是一些瀏覽器使用頁面編碼來確定提交的編碼,儘管存在「accept-charset」。請參閱http://stackoverflow.com/questions/153527 – Artefacto 2010-07-13 15:53:08