来自Windows-1252的mb_detect_encoding的意外结果

时间:2014-03-02 08:32:30

标签: php utf-8 character-encoding mb-convert-encoding

我读过维基百科关于Windows-1252字符编码的文章。对于字节值<&lt;的字符。 128,它应该与ASCII / UTF-8相同。

这是有道理的:

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'的字节序列应与ASCII相同。为了最小化变量,如果我指定了正确的Windows-1252字节序列:

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

在这些情况下,更改“strict”参数(具有相当无用的文档)不会做任何事情。

1 个答案:

答案 0 :(得分:2)

windows-1252不支持编码检测。根据{{​​3}}文档:

  

mbstring目前实现以下编码检测   过滤器。如果以下内容存在无效的字节序列   编码,编码检测将失败。

     

UTF-8,UTF-7,ASCII,   EUC-JP,SJIS,eucJP-win,SJIS-win,JIS,ISO-2022-JP

     

对于ISO-8859- ,   mbstring始终检测为ISO-8859 -

     

对于UTF-16,UTF-32,UCS2和   UCS4,编码检测将始终失败。