2009-06-29 90 views
13

我想在我們的網站上使用UTF8進行標準化。我們所有的數據庫和互聯網資料都是UTF8。我們所有的網絡服務器都發送了charset=utf-8 HTTP標頭。但是我發現通過將Firefox中的編碼(查看 - >字符編碼)更改爲其他內容,我可以將一個拉丁-9字符輸入到表單中,PHP將它們視爲格式錯誤的UTF8。我可以強制網頁瀏覽器發送表單文本爲UTF8嗎?

我有多少擔心?用戶的Web瀏覽器是否可以覆蓋UTF8字符集標題併發送非UTF8?

更新:有幾個人建議在單獨的窗體上使用accept-charset。不過,我寧願不必更改每個Web表單。假設我可以控制HTTP內容類型標題,並且它被設置爲UTF8,我有什麼可擔心的嗎?

+0

「我們所有的數據庫和互聯網的東西」 - 所有的互聯網東西都屬於我們。 – 2013-02-13 15:47:00

回答

2

在表單元素上放置一個accept-charset =「UTF-8」元素,儘管對頁面內容進行了編碼,也會導致表單發佈爲UTF-8。

10

是否有可能對用戶的網絡瀏覽器 覆蓋UTF8字符集 頭和發送非UTF8?

當然。您不控制客戶端,客戶端可以做任何想做的事情,包括讓用戶重寫正常的編碼,並將垃圾郵件(或通過垃圾郵件)發送到您的服務器。

這就是說,這聽起來像是你在這裏採取了大部分重要步驟。您的實際HTML文檔採用UTF-8編碼並明確標記,這意味着瀏覽器通常會默認使用該編碼提交表單。 (請注意,HTML規範並不要求這樣做,明確指定accept-charset是唯一符合規範的保證。)我懷疑這會在所有現代瀏覽器中按預期工作,並且您可以輕鬆地進行測試。

在服務器上,您的工作是總是驗證您的輸入,以便對您的服務很重要。雖然絕大多數用戶都會很樂於使用現代標準瀏覽器,但HTTP協議是開放的,而且既有古怪的用戶也有惡意的黑客,並且都可以拋出任何他們想要的數據。確保在涉及安全或認證數據時不要對數據編碼做出假設,並在將其推入數據庫之前對其進行消毒。

4

我認爲最好的解決方案是在用戶提交數據時轉換爲UTF-8並處理任何非UTF-8字符。如上所述,accept-charset="UTF-8"不保證數據是UTF-8。而且,如果您必須在整個網站上更改表格,那麼這不是一個好的解決方案。

因此,在提交時處理輸入可能是更好的方法。

相關問題