像 čęąįęėįųų 等字母变成 �。我怎样才能防止这种情况或使字符与以前一样。
$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。
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 个字节,因此当您从 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
尝试以写入编码保存您的脚本文件。我猜它应该是没有 BOM 的 utf-8