2017-05-21 69 views
4

有人可以解释为什么输出是ASCII在下面的最后三个测试?PHP默认字符串编码

我在我自己的系统上获得了相同的结果,PHPTester.netPhpFiddle.org

echo mb_internal_encoding();      // UTF-8 

$str = 'foobar'; 
echo mb_check_encoding($str, 'UTF-8');    // true 
echo mb_detect_encoding($str);      // ASCII 

$encoded = utf8_encode($str); 
echo mb_detect_encoding($encoded);     // ASCII 

$converted = mb_convert_encoding($str, 'UTF-8'); 
echo mb_detect_encoding($converted);    // ASCII 

回答

5

这是因为在foobar没有字符无法在ASCII表示。

mb_check_encoding($str, 'UTF-8')作品,因为ASCII文本是UTF-8(故意如此)

但在没有多字节字符,还有两者之间并没有明显的差异天生兼容。此证明:'foobar' === utf8_encode('foobar') // true

+0

很好的答案 - 感谢您的回复 – cantera