检测PHP中没有多字节扩展的编码


Detect encoding in PHP without multibyte extension?

是否有一种方法可以检测PHP中字符串的编码而无需加载mbstring扩展?我知道有可能这样做与mb_detect_encoding(),但是否有一个等效的,非多字节函数?

如果没有,实现至少可以检测UTF-8的detect_encoding()函数需要什么?

PHP中的字符串只是字节序列,它们不携带编码信息。mb_detect_encoding实际上并不检测字符串的编码,它试图通过对一系列识别函数运行字节序列来进行有根据的猜测,每个编码一个(默认情况下由mb_detect_order给出),并返回序列匹配的第一个。这些函数非常基本,甚至不存在于许多流行的编码中。

无论是否使用mbstring扩展,都没有办法确定字符串的编码-只有可能排除一些,只有当字符串碰巧包含在这些特定编码中无效的字节序列时才能这样做。

你永远不会知道"'xC2'xA4"应该是UTF-8 ¤还是ISO-8859-1 ¤,因为它们是完全相同的字节。

有关更多信息,请参阅:每个软件开发人员绝对、肯定地必须了解Unicode和字符集的绝对最低限度

总是有iconv,这在PHP中通常是默认启用的

<pre>
<?php
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "ISO-8859-1");
var_dump(iconv_get_encoding('all'));
?>
</pre>