将字符串转换为数组后,一些字符变为此�

时间:2012-04-06 15:22:31

标签: php utf-8

像čęąįęėįųų等的信件变成了 。我怎样才能防止这种情况发生,或者像以前那样使角色变得相同。

$x = 0; $b = 0;
$char2 = ''; //define a variable to collect all the chars
while ($x++ < 10) {
    $char2 .= $text[$b++]; //add to the char
    $char2 .= ' ';
}

输出示例 之前:Ašėjau。 之后:A jau。

3 个答案:

答案 0 :(得分:2)

mb_internal_encoding("UTF-8");
$x = 0; $b = 0;
$char2 = ''; //define a variable to collect all the chars
while ($x++ < 10) {
    $char2 .= mb_substr($text, $b++, 1); //add to the char
    $char2 .= ' ';
}

是你想要的。

UTF8字符是多字节的,因此你的'š'由2个字节组成,但用[]索引只占用其中一个,并且在一个utf8字符的字节之间放置空格会破坏它。

编辑:您需要先指定内部编码。

答案 1 :(得分:0)

尝试以写入编码方式保存脚本文件。 我想它应该是没有BOM的utf-8

答案 2 :(得分:0)

您没有考虑到某些字符占用超过1个字节,因此当您从2字节宽的字符中取出1个字节时,它将成为其他字符。在这种情况下"�"

这是一种做你想做的事情的方法:

<?php
$text = "Aš ejau";
$chars = preg_split('/(?<!^)(?!$)/u', $text ); 
$char2 = '';

foreach( $chars as $char ) {
    $char2 .= $char;
    $char2 .= ' ';
}


echo $char2;

//A š   e j a u