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引数に指定できるのは変数だけです。