PHPのマルチバイト文字列関数で”ISO-2022-JP”, “JIS”, “ISO-2022-JP-MS”の違い

PHP5.2.1ぐらいから”ISO-2022-JP-MS”というのも使えるそうなので”ISO-2022-JP”,”JIS”とどう違うか試してみました。

<?php
/* UTF-8からISO-2022-JP, JIS, ISO-2022-JP-MSに変換してみる */
setlocale( LC_ALL, 'ja_JP.UTF-8' );

/* ダメ元で☎ ☃なども */
$str = 'アイウエオ ㈱ ㈲ ① ② Ⅰ Ⅱ ℡ ㎏ ㎎ 﨑 髙 神 ☎ ☃';

header( 'Content-Type: text/plain; charset=ISO-2022-JP' );

printf( "%sn", 'PHP' . PHP_VERSION );
$encodings = array( 'ISO-2022-JP', 'JIS', 'ISO-2022-JP-MS' );
foreach ( $encodings as $encoding ) {
    printf( "%sn", $encoding . ' : ' . mb_convert_encoding( $str, $encoding, 'UTF-8' ) );
}
?>

これを実行すると以下のようになります。

PHP5.2.17
ISO-2022-JP : ????? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
JIS : アイウエオ ? ? ? ? ? ? ? ? ? ? ? ? ? ?
ISO-2022-JP-MS : アイウエオ ㈱ ㈲ ① ② Ⅰ Ⅱ ℡ ㎏ ㎎ 﨑 髙 神 ? ?

ISO-2022-JPとJISの違いは半角カナが使えるかどうか。ISO-2022-JP-MSはそれに加えて機種依存文字や外字まで使えてしまう。ってことですかね。

メール送信で使えそうな気がしますが、”-MS”と付いてるだけあってWindows以外では化けると思います。
Macは試してませんが携帯宛だど髙などが絵文字か空白か「?」に化けてました。

ということで、半角カナを使われそうな携帯などで”JIS”、それ以外では”ISO-2022-JP”を使って”ISO-2022-JP-MS”は使わない方が無難。

コメントを残す

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