2017-05-21 67 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