我有一个字符串,我想访问ä
个字符。但它输出问号而不是正确的字符。
这是我的代码。
$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); // ä
答案 0 :(得分:4)
根据您的字符集,字母ä是一个多字节字母。使用数组访问访问字符串时,它返回第一个字节。如果是多字节ä,则返回不可打印的控制字符。
使用array-access访问数组会返回第一个元素,无论其长度如何,在本例中为多字节ä。
答案 1 :(得分: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()。
我强烈建议您阅读此问题的答案Get first character of UTF-8 string