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. 後: ああああ。

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バイトで構成されますが、[]を使用してインデックスを作成すると、そのうちの1つだけが使用され、1つのutf8文字のバイトの間にスペースを入れると破棄されます。

編集:最初に内部エンコーディングを指定する必要があります。

于 2012-04-06T15:27:35.657 に答える
0

スクリプトファイルを書き込みエンコーディングで保存してみてください。BOMなしのutf-8である必要があります。

于 2012-04-06T15:28:07.933 に答える
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 に答える