我有这个代码:
$line = 'ABBEKÅS';
echo 'word is '.$line.PHP_EOL;
for($i=0;$i<strlen($line);$i++){
echo 'char '.$line[$i].PHP_EOL;
}
结果是:
word is ABBEKÅS
char A
char B
char B
char E
char K
char ?
char ?
char S
为什么单词看起来不错,而单个字符却不好看?我试着将两者都转换为utf-8和ISO,但都无济于事。这就是我尝试的:
$line = iconv("UTF-8", "ISO-8859-1", $line);
和
$line = iconv("ISO-8859-1", "UTF-8", $line);
结果仍然是一样的。
因为假设每个字符在for循环中只有一个字节(一次迭代一个字节,而不是一次迭代字符),所以Å
是一个多字节字符。
如果您需要将多字节字符串分解为段/字符,请使用PHP的多字节字符串函数
for($i=0;$i<mb_strlen($line);$i++){
echo 'char '.mb_substr($line, $i, 1).PHP_EOL;
}
演示
因此,解决方案是使用mb_substr检索字符。像这样:
$line = 'ABBEKÅS';
echo 'word is '.$line.PHP_EOL;
for($i=0;$i<strlen($line);$i++){
echo mb_substr($line, $i, 1).PHP_EOL;
}