PHPスクリプトに送信されたデータの文字コードの変換

PHPスクリプトに送信されたデータの文字コードの変換について

Webアプリケーションでは、ブラウザから送信されてくるデータの文字コードを指定することはできません。
そこで、データを受信した後に文字コードを判別し、変換する必要があります。

mbstring.encoding_translation

設定ファイル(php.ini)のmbstring.encoding_translationを「On」にすると、受信したデータを自動的に内部エンコーディングに変換します。

mbstring.encoding_translationの初期値は「Off」です。
アプリケーションの互換性を考えると「Off」のまま使用する方が良いと考えます。

mb_convert_encoding

文字コードを変換するには、「mb_convert_encoding」を使用します。

/* 内部文字エンコーディングからSJISに変換 */
$str = mb_convert_encoding($str, "SJIS");

/* EUC-JPからUTF-7に変換 */
$str = mb_convert_encoding($str, "UTF-7", "EUC-JP");

/* JIS, eucjp-win, sjis-winの順番で自動検出し、UCS-2LEに変換 */
$str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win");

mb_convert_encoding」の3番目の引数に”auto”を指定する場合は、あらかじめ設定ファイル(php.ini)で「mbstring.language=Japanese」を指定するか、「mb_language」を使用して、言語を指定します。

/* "auto" は、"ASCII,JIS,UTF-8,EUC-JP,SJIS" に展開される */
mb_language('japanese');
$str = mb_convert_encoding($str, "EUC-JP", "auto");

携帯電話の絵文字など、規格外のコードが含まれている場合は、「mb_substitute_character」を使用して変換し、内部で処理します。
(参考)docomo(ドコモ)やauの絵文字の抽出をPHPで最も簡単にする方法

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です