euc-jpとPOST送信と文字化け (php)


テキストボックスに「複製」と入力して「submit」したら、
「?」と文字化けする現象が発生した。
不思議なことに同じformなのに

①type="submit"
ならば文字化けせず

②type="button" onClick="javascript:document.test_form.submit()"

と、javascriptによる「submit」を行なった場合のみ文字化けする。

原因を詳しく調べていくと、①の場合でも文字化けすることが判明した。
「type="submit" value="検索"」の「検索」のように日本語と一緒に送信すると
文字化けしない。value="search" などでは文字化けした。

環境

・テキストエンコード
    送信側、受信側:EUC-JP
・php環境
    mbstring.internal_encoding などEUC-jp設定

原因

ホームページ作成/福島県いわき市」によると

   テキストエンコードがEUC-JPで記述されているサイトでは、
   ときおりブラウザがテキストエンコードをSJISなどで解釈してしまって
   文字化けが起きるケースがある

ということ。
2バイト目がshift-jisのコードの条件に該当するのが原因です。

駄目だった対策

①<meta http-equiv="content-type” content="text/html; charset=EUC-JP”>
  メタタグでキャラセットをEUC-jpにしても直らない。

②<form method="" action="" Accept-charset="euc-jp">
 「Accept-charse」 で送信文字コードを指定しても直らない。

③document.charset='EUC-JP';
  javascriptで、テキストエンコードをEUC-jpに指定したが直らない。

④php.iniの設定
  ini_set('default_charset' , '');
  ini_set('mbstring.internal_encoding' , '');
  ini_set('mbstring.http_output' , '');
  ini_set('mbstring.http_output','');

  各種設定を指定したが直らない。

対策

<input type="hidden" name="dummy" value="入口">

「入口」などの2バイト目に「0xFD」や「0xFE」を利用している文字コードを一緒に送信する。
理由は簡単で、2バイト目に「0xFD」や「0xFE」があるのは「EUC-JP」のみだからです。
対策としては、ダミーフィールドが増えるのですっきりとしないですが、
一番簡単で確実な対策方法でした。

参考サイト

ホームページ作成/福島県いわき市
PHPの文字化けを本気で解決する - ぎじゅっやさん
ロックオン開発チームブログ


コメントを残す

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