[PHP-users 16042]機種依存文字や外字について

Satoshi Iwanaga iwanaga @ yubitoma.co.jp
2003年 6月 19日 (木) 17:18:54 JST


はじめまして。
岩永といいます。

PHPで、機種依存文字や外字をチェックする
プログラムを作っています。

環境
・PHP バージョン : 4.2.2

外字範囲
・SJISの0xF040以降

問題
・コードが変化する


■EUCで渡ってきたデータをSJISに変換して、コードを表示
---------------------------------------------
// $sjis ・・ SJISに変換したデータ
// $euc_data ・・ EUCで渡ってきたデータ
$sjis = mb_convert_encoding($euc_data, "SJIS", "EUC-JP");
echo $sjis;
---------------------------------------------

「森」(SJISコード「9058」)という時をSJISに変換した場合、
「9058」と上手くSJISに変換されます。
しかし外字(例えばSJISコード「fa5c」)を、SJISに変換すると
「ed40」と変換されてしまいました。


■EUCでデータが渡ってきてないのかと思い、調査
---------------------------------------------
// $euc_data ・・ EUCで渡ってきたデータ
echo mb_detect_encoding($euc_data);
---------------------------------------------

「森」で試した場合、正しくEUC-JPと表示されたのですが
SJISコード「fa5c」で試した場合、UTF-8と表示されました。


■はmb_detect_encodingの表示をSJIS,EUC-JPを優先させて表示
---------------------------------------------
// $euc_data ・・ EUCで渡ってきたデータ
echo mb_detect_encoding($euc_data,"SJIS,EUC-JP,ASCII,JIS,UTF-8");
---------------------------------------------

SJISコード「fa5c」で試した場合もEUC-JPと表示されました。


SJISコード「fa5c」で試した場合、「ed40」とコードが変化するのは
何故でしょう?
色々調べたのですが、どうしてもわかりませんでした。
おわかりになる方がいましたら、ご教授ください。
よろしくお願いいたします。


PHP-users メーリングリストの案内