mb_detect_encoding无法正常使用Windows-1250(CP1250)

时间:2013-06-14 08:35:09

标签: php encoding cp1250

我在mb_detect_encoding()中检测CP1250时遇到问题,在我的情况下,我想检测3个编码:

mb_detect_encoding($string, 'UTF-8,ISO-8859-2,Windows-1250')

但Windows不支持编码,任何解决方案?

2 个答案:

答案 0 :(得分:5)

mb_detect_encoding 始终“检测”单字节编码。您可以在mb_detect_order的文档中了解相关内容:

  

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

     

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

     

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

     

对于UTF-16,UTF-32,UCS2和UCS4,编码检测将失败   总是

结论:

  1. 要求检测ISO-8859-2是没有意义的;它会一直告诉你“是的,就是这样”(除非它首先检测到UTF-8)。
  2. 不支持Windows-1250,但即便如此,它也可以像ISO-8859-2一样工作。
  3. 通常,不可能准确地检测单字节编码。如果您发现自己需要在PHP中执行此操作,则需要手动执行此操作;不要期待非常好的结果。

答案 1 :(得分:0)

将ISO-8859-2与Windows-1250或任何其他单字节编码区别开来是不可行的。 mb_detect_encoding只是为您提供了第一个对给定字符串有效的编码,两者都同样有效。根据定义,“检测”编码不可能具有任何精确度。