[PHP-users 34829] Re: POST送信後に表示される文字

Masayuki MORIYAMA msyk @ mtg.biglobe.ne.jp
2009年 11月 5日 (木) 13:55:19 JST


森山です。

Web で EUC-JP と言った場合、正式な EUC-JP とは違い
Windows の丸つき数字などを拡張した文字コードが使わ
れています。

Windows の IE での使われいるのは、MLANG.DLL で提供
されている変換ルーチンで使用できる Windows Codepage
51932(以後、cp51932 とします) と呼ばれるものです。

この cp51932 は、EUC-JPのJISX 0212 補助漢字がサポー
トされていませんので、IE では数値文字参照に変換して
から POST しています。

Firefox でのEUC-JPの変換に関しては、cp51932 をベース
にして補助漢字をサポートするような拡張が行なわれてい
ます。

この拡張は、一見すると妥当なように思われるかもしれま
せんが、次のような問題があります。

POST 時に cp51932 の NEC選定IBM拡張文字と補助漢字
の両方で定義されている文字(例えば、草なぎ剛の「なぎ」
の字)に関して、POST する際に、補助漢字のコードポイ
ントではなく NEC選定IBM拡張のコードポイントと優先され
ます。

そして、補助漢字にだけ存在する文字(例えば、森鴎外の
鴎が[區鳥]の字体になっている文字)は、補助漢字のコー
ドポイントを使用するという事をやっているため、cp51932
で変換すると補助漢字が変換できず、補助漢字を変換し
ようとして eucJP-ms(PHPだとeucJP-win)で変換すると、
cp51932 の NEC選定IBM拡張文字を正しく変換できないと
いう問題が発生してしまいます。

bug 4873 – EUC-JPエンコーダは補助漢字を変換すべきではない
http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=4873

eucJP-ms と CP51932 の違い コードページ932/ウェブリブログ
http://msyk.at.webry.info/200511/article_2.html

「[區鳥]」が「乗ス」に化けるメカニズム コードページ932/ウェブリブログ
http://msyk.at.webry.info/200611/article_2.html

Web で EUC-JP を使って文字化けを回避したい場合、こ
のようなWebブラウザ依存の問題やDBの対応文字コードの
問題をアプリ側で自力解決する必要があります。

もしお手軽に解決したいという事なのであれば、EUC-JP
はやめて UTF-8 に移行するのが一番簡単と言えます。

--
森山 将之 http://msyk.at.webry.info/


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