PHP入門 文字列関数 文字エンコーディングする(mb_convert_encoding関数)

マルチバイト文字(日本語)を扱う場合、文字エンコーディングを意識する必要があります。アプリケーション内で使用する文字エンコーディングは統一しておくことが原則です。データベースやテキストファイルを他のアプリケーションと共有している場合は、必ずしも文字エンコーディングを統一できない場合もあります。そのような場合は、アプリケーション側で明示的に文字エンコーディングを変換する必要があります。文字エンコーディング変換の機能を提供するのは、mb_convert_encoding関数になります。

構文:mb_convert_encoding関数

mb_convert_encoding(string|array $string , string $to_encoding
          [, string|array|null $from_encoding]):string|array|false
$string任意の文字列、またはその配列
$to_encoding変換後の文字コード
$from_encoding返還前の文字コード(規定はdefault_charsetパラメータの値)

マルチバイト文字列関数は多くの文字エンコーディングに対応していますが、日本語を利用するなら、まずはSJIS、Shift-JIS(Windows固有の機種依存文字を含んだSJIS)、EUC-JP、ISO-2022-JP、JIS、UTF-8、UTF-16、UTF-32あたりになると思います。

引数$from_encodingには、可能性のある文字コードを「UTF-8、SJIS、EUC-JP」のようにカンマ区切りの文字列、もしくは配列として指定できます。

例:与えられた文字列をEUC-JPに変換するコード

変換前の文字コードはUTF-8→SJIS→JISの順番で検出するものとします。

 <?php 
  file_put_contents('result.txt',mb_convert_encoding('ハロー赤ちゃん','EUC-JP','UTF-8,SJIS,JIS'));

EUC-JP文字コードでファイルが出力されます。

実行結果
実行結果

オブジェクトの内容をまとめて文字コード変換するmb_convert_variables関数もあります。用法は似ていますが引数の並び順がことなります。

//$objの内容をUTF-8→EUC-JPに変換
mb_convert_variables('ECU-JP','UTF-8',$obj);

また、mb_convert_variables関数は与えられたオブジェクトに対して直接コード変換を試みます。よって、第3引数に指定できるのは変数だけです。