使用方括号的字符串中的访问字符无法正确输出

时间:2016-11-13 10:38:47

标签: php arrays string

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

这是我的代码。

$array = array('ä', 'b', 'c');
$string = 'äbc';
echo $string; // äbc
echo '<br />';
echo $string[0]; // ?
echo '<br />';
echo $array[0]; // ä

DEMO

谁能告诉我为什么?

已更新

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

2 个答案:

答案 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]; // ä

DEMO

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

我强烈建议您阅读此问题的答案Get first character of UTF-8 string