0

像 čęąįęėįųų 等字母变成 �。我怎样才能防止这种情况或使字符与以前一样。

$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。

4

3 回答 3

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 字符的字节之间放置空间会破坏它。

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

于 2012-04-06T15:27:35.657 回答
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 
于 2012-04-06T15:31:05.223 回答
0

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

于 2012-04-06T15:28:07.933 回答