5

文字列に 5 つのギリシャ文字があります。php で substr を使用した後、出力はその α. のようなものになります。αβγのはずです。エンコーディングに関する提案はありますか? 私が試してみました

header ('Content-type: text/html; charset=utf-8');

結果なし。

         <?php
          $string = "αβγδε";
          $thedoc = substr($string, 0, 3); 
          echo $thedoc."<br/>";
        ?>
4

4 に答える 4

16
$thedoc = mb_substr($string, 0, 3, 'UTF-8'); 

mb_substrの代わりにを使用する必要がsubstrあり、このコンテキストで使用される PHP の内部エンコーディングを UTF-8 に設定する必要があります。

このsubstr関数は、各文字が 1 つの 8 ビット バイトである単純な文字モデルに基づいています。だけを使用しsubstr($string, 0, 3)て、文字列の最初の 3 バイトを取得します。UTF-8 エンコーディングのギリシャ文字は 2 バイトを必要とするため、アルファ (α) と内部表現の最初のバイトであるベータの「半分」を取得します。これは有効な UTF-8 データではないため、「置換」を使用して表示されます。文字」 - (文字レベル データ エラーの表示)。

実際には、代わりに を使用substr($string, 0, 6)して最初の 6 バイト (3 文字) を取得することもできますが、これは醜い方法であり、UTF-8 でそれぞれ 2 バイトを取る文字であるテキストに依存しているため、たとえばラテン語とギリシャ語の混合テキスト。任意の UTF-8 データを処理できるアプローチを使用する方がはるかに優れています。

于 2012-06-27T12:07:34.083 に答える
3

これを試してみてください。問題が解決します。

iconv_substr($string, 0, 1, 'utf-8');

于 2013-10-11T08:45:40.110 に答える
1

PHP コードで文字を書き出すときは、PHP ファイル自体のエンコーディングを必ず確認してください。ブラウザで UTF-8 文字を表示するには、次のように content-type META タグも に含める必要があります。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
于 2012-06-27T11:28:24.123 に答える
0

値を強制的に utf8 文字列にすることもできます

echo utf8_encode( $thedoc ) . '<br />';
于 2012-06-27T11:29:45.437 に答える