• 締切済み

URLエンコードされた日本語をデコードする方法

下記のようなフォームから日本語を送信してそれを日本語に戻すスクリプトをPHPで作成して実験をしているのですがうまくいきません。 フォームででは、、 <FORM method="get" action="./test.php"> <input type="text" name="str"> test.phpでは、、 CONTENT="text/html; charset=EUC-JP"とした上で echo "元の文字:" . $str . "<BR>\n";としています。 この場合、"あ"を入力するとtest.phpでは"あ"と表示してくれるのですが、"あい"では "あa:BR>" となってしまいます。漢字を入力した場合は"船"は"船"、"日"は"楠:BR>"とよくわからない結果です。これはどこがおかしいのでしょうか? 環境はOS:RedHatLinux、PHP-4.1、apache-1.3です。

みんなの回答

noname#101981
noname#101981
回答No.1

charset=EUC-JP を指定しているのであれば、 フォームおよびtest.phpのファイル自体の文字コードを EUC-Jpで作成していますか?

frfr
質問者

お礼

IE ver6でテストしていましたが原因がいまだによくわかりません。手元にOpera ver6.03があったのでこれを使ってテストしました。結論はIEとは違った挙動をします。Operaの方が「納得」のいく文字化けをします。IEはなんだかよくわからない「余計なお世話」をしているようです。 文字化け対策ならフォームをeucで書いてphpもeucにすれば間違いがないことがわかりました。 ありがとうございました。

frfr
質問者

補足

回答ありがとうございます。 フォームをeucとshift_jis二種類作ってテストしていたのですがasciiだけで記述していたせいかeucでもshift_jisでも文字化けしました。eucで記述してもasciiだけだとブラウザがshift_jisだと判断していたようです。このことがわからないまま安易にOKWebをたよってしまいました。 フォームの文字コードををMETAタグで明記したらeucのフォームからの場合は文字化けしなくなりました。フォームの文字コードがshift_jisだと一部の文字で変換がおかしくなります。 ただ「あ」や「船」だけが何故文字化けしないのか今だに不明です。この理由をご存知ないでしょうか?

関連するQ&A

専門家に質問してみよう