我有一个字符串,我想访问ä
字符。但是它输出的是问号而不是正确的字符。
$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字符串的第一个字符