EUC-JPフォームで文字化け
現在EUC-JPでサイトを作っているのですが、そこで文字化けに見舞われました。
フォームに「暴」「貼」などを入力してPOSTすると、コードで受け取った時点で化けてしまいます。
よくわからないまま解決したので、メモ。
「暴」「貼」「能」。こいつらが何故化けるか。
こいつらが化けるのはよくある話で。こちらなどに詳しいです。
これらの文字はSJIS上では2バイト目が「5C」というコードになっている。
「5C」は単独だと「\」をあらわすコードであり、プログラムがエスケープだと勘違いして、文字化けを引き起こすと。
さて、今回の環境を見てみます。
サイトはレンタルサーバ上に構築しています。サーバのmbstringの設定は、以下のとおり。
magic_quotes_gpc On mbstring.detect_order auto mbstring.encoding_translation On mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output pass mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.script_encoding no value mbstring.substitute_character no value
この環境で、文字セットEUC-JPで記述したページのフォームからのPOST文字が化けてしまいます。
magic_quotes_gpcがOnになっています。
こいつはプログラムへの「”」「’」「\」といった入力値を自動でエスケープする機能。
仮に、「暴」などがSJISで入力された場合、この機能によって間違ってエスケープされて化けることは考えられます。
うーむしかしEUC-JPで書いているのにナゼニ・・・?
mbstring.detect_orderについては、マニュアルによれば
“auto” は、 “ASCII, JIS, UTF-8, EUC-JP, SJIS”に展開されます
とある。この順番でチェックしたらEUC-JPと認識されそうなもんだが・・・。うううむナゼニ。
しかし、ためしに有名なおまじないをしてみたら、化けなくなりました。
POSTデータの一番最初に「美乳」を送りつけるとおとなしく解釈しやがった。
うううううむ、なぜだーーーー。
ともかく、「美乳」はまずいので他の文字にしておこう。
うううむ。




2010年5月24日(月曜日) at 9時04分
[…] massat.jp – EUC-JPフォームで文字化け […]