特殊字符不';t输出正确


Special character doesn't output correctly

我有这个代码:

$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;
}