3

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

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

但是 Windows 不支持编码,有什么解决方案吗?

4

2 回答 2

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 一样工作。

一般来说,不可能准确地检测单字节编码。如果您发现自己需要在 PHP 中执行此操作,则需要手动执行;不要期望非常好的结果。

于 2013-06-14T08:51:03.883 回答
1

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

于 2013-06-14T08:47:47.467 回答