2010-01-06 39 views
6

今天,我特地到facebook.com的HTML代碼,並發現了這樣的事情:Facebook字符集檢測機制?

<input type="hidden" value="€,´,€,´,水,Д,Є" name="charset_test"/> 

它重複<form>...</form>內兩次。

任何想法這個代碼可能會有用 - 某種服務器端客戶端字符集檢測?據我所知,無論如何,瀏覽器字符集都是通過HTTP請求傳輸的(一個「Accept-Charset」頭文件)。

回答

4

任何想法,這段代碼可能是有用的 - 某種服務器端的客戶端字符集檢測的?

顯然是這樣。

  • E2 82 AC以UTF-8
  • 88窗口-1251
  • 80中的其他:因爲有編碼它的許多方面

    歐元符號爲字符集探測有用窗口-125X編碼

  • A4在ISO-8859-7,-15,-16和
  • A2 E3在GB18030
  • 85 40在移位-JIS

據我所知,瀏覽器的字符集被在HTTP請求無論如何(一個「接收字符集」報頭)來發送。

應該在HTTP Content-Type頭中發送的,但這並不意味着用戶代理實際上得到它的權利。

3

我猜他們在接收腳本中匹配這個,以確保客戶端正確地發送了編碼爲UTF-8的請求,甚至可能是因爲他們知道預期的字符,以實時檢測實際的編碼。

如果我沒有記錯 - 我不得不處理一次 - 在某些情況下,IE6中的表單編碼存在問題。

+0

謝謝,我要去google關於這個IE6相關的表單問題。 – Void 2010-01-06 12:30:38

+0

我可能是錯的,但我認爲它是關於不明確的編碼的東西(即當內容類型標題說明與內容類型META標籤不同時)。無論如何,我認爲Facebook正在這樣做,因爲他們正在被各種客戶訪問,他們需要確保他們的編碼是正確的。 – 2010-01-06 12:59:38

0
&euro;,&acute;,€,´,水,Д,Є 

我猜有些瀏覽器發送&euro;一樣&acute;一樣´

因此,他們可以檢查像charset_test [0] == charset_test [2]和charset_test [1] == charset_test [ 3]

對於其他人物,我不知道。水可能測試CJK。

0

正如Pekka所說,這是爲了能夠檢測請求字符集。 HTTP協議不提供指定請求字符集的方法。因此,人們必須依賴協議之外的約定。通常瀏覽器是可預測的,但這個訣竅是百分之百確定的唯一方法。

參見:http://www.phpwact.org/php/i18n/charsets