2014-03-02 71 views
2

我已閱讀維基百科有關Windows-1252字符編碼的文章。對於字節值爲< 128的字符,它應該與ASCII/UTF-8相同。mb_detect_encoding與Windows-1252意外的結果

這是有道理的:

php -r "var_export(mb_detect_encoding(\"\x92\", 'windows-1252', true));" 'Windows-1252'

一個左花撇號被正確地檢測。

php -r "var_export(mb_detect_encoding(\"a\", 'windows-1252', true));" false

咦?字母「a」不是Windows-1252?

我的終端在這裏運行,它被設置爲UTF-8,所以它應該與字母'a'的字符序列相同,爲了最小化變量,如果我指定了正確的Windows-1252字節序列:

php -r "var_export(mb_detect_encoding(\"\x61\", 'windows-1252', true));" false

改變「嚴」參數(其中有相當無用文件)不執行任何操作在這種情況下不支持windows-1252

回答

2

編碼檢測根據的。 mb_detect_order文檔:

mbstring當前實現了以下編碼檢測 過濾器。如果以下 編碼的字節序列無效,則編碼檢測將失敗。

UTF-8,UTF-7,ASCII, EUC-JP,SJIS,EUCJP贏,SJIS雙贏,JIS,ISO-2022-JP

對於ISO-8859- , 總是MBSTRING檢測爲ISO-8859-

對於UTF-16,UTF-32,UCS2和 UCS4,編碼檢測將始終失敗。

+2

呵呵,就像一個*白癡*我曾預計信息將在'mb_detect_encoding'文檔中! – Hut8