像čęąįęėįųų等的信件变成了 。我怎样才能防止这种情况发生,或者像以前那样使角色变得相同。
$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。
答案 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