我试图了解这两个函数的逻辑mb_detect_encoding
和mb_check_encoding
,但文档很差。从一个非常简单的测试字符串开始
$string = "\x65\x92";
使用 Windows-1252 编码时,它是小写的“a”,后跟一个大引号。
我得到以下结果:
mb_detect_encoding($string,"Windows-1252"); // false
mb_check_encoding($string,"Windows-1252"); // true
mb_detect_encoding($string,"ISO-8859-1"); // ISO-8859-1
mb_check_encoding($string,"ISO-8859-1"); // true
mb_detect_encoding($string,"UTF-8",true); // false
mb_detect_encoding($string,"UTF-8"); // UTF-8
mb_check_encoding($string,"UTF-8"); // false
我不明白为什么
mb_detect_encoding
根据https://en.wikipedia.org/wiki/ISO/IEC_8859-1和https:/ /en.wikipedia.org/wiki/Windows-1252,该字节x92
是在 Windows-1252 字符编码中定义的,但不是在 ISO-8859-1 中定义的。其次,我不明白如何
mb_detect_encoding
返回false
,但mb_check_encoding
可以返回true
相同的字符串和相同的字符编码。最后,我不明白为什么字符串可以被检测为 UTF-8,严格模式与否。该字节
x92
是 UTF-8 中的延续字节,但在此字符串中,它跟随一个有效字符字节,而不是序列的前导字节。