带方括号的字符串中的访问字符不能正确输出


Access character in a string with square braces doesn't output correctly

我有一个字符串,我想访问ä字符。但是它输出的是问号而不是正确的字符。

这是我的代码。
$array = array('ä', 'b', 'c');
$string = 'äbc';
echo $string; // äbc
echo '<br />';
echo $string[0]; // ?
echo '<br />';
echo $array[0]; // ä

谁能告诉我为什么?

echo strlen($string); // returns 4
echo mb_substr($string, 0, 1); // ä

根据您的字符集,字母ä是一个多字节的字母。当您使用数组访问访问字符串时,它将返回第一个字节。对于多字节ä,返回一个不可打印的控制字符。

使用数组访问返回第一个元素,不管它的长度是多少,在本例中是多字节的ä。

您需要像这样使用mb_substr()

$array = array('ä', 'b', 'c');
$string = 'äbc';
echo $string; // äbc
echo '<br />';
echo mb_substr($string, 0, 1, 'UTF8'); // replace UTF8 with whatever charset you are using
echo '<br />';
echo $array[0]; // ä

原因是PHP假设字符占用一个字节。但在您使用ä的情况下并非如此,因此您需要使用mb_substr()而不是索引或substr()。

我强烈建议阅读这个问题的答案获取UTF-8字符串的第一个字符