• ベストアンサー

文字化けについて

文字化けで困っています。 教えてください。 下記のようなコードで、フォームに"猫"と入力すると、 "\0"と戻ってきてしまいます。 このときブラウザのurlにはtest.php?key=%C7%ADとでており、"%C7%AD"をurldecodeでデコードすると、"猫"となります。 ブラウザ内部のデコードがおかしいのかと思ったのですが、Firefox、IE共に"\0"が戻ってきます。 下記コードにまずいところがあるのでしょうか? もしくは、何か対処方法はないでしょうか? よろしくお願いします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ecu-jp"> <meta http-equiv="Content-Style-Type" content="text/css"> </head> <body> <form action="test.php" method="get"> <input type="input" name="key" value="<?=$key ?>"> <input type="submit" value="実行"> </form> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.4

文字コードの自動変換がかかってるのではないですか? mbstring.encoding_translation mbstring.http_input の設定を確認してみてください。 環境変数 $_SERVER['REQUEST_URL'] からkeyの値を取れば 設定変えなくても猫を捕まえられますが。

xyz_1990
質問者

お礼

ありがとうございます。 mbstring.encoding_translationをoffにすることで 解決しました!!

その他の回答 (3)

  • aqucent
  • ベストアンサー率39% (78/200)
回答No.3

1つ確認したいのですが、$key はどこから得ることを前提としているのでしょうか? 質問文で掲示されたソースのある場所が test.php?key=%C7%AD とすると、再帰的にGETし続けるので、それはあり得ないと思いますが、 仮に、form.php が質問文のソースだとすれば、$key はどこから得るのでしょう? # 何となく、form.php?key=%C7%AD かな、と想像しますが、確信できません。

xyz_1990
質問者

補足

どうもです。 本来は、 a.phpでフォームに入力して、 b.phpで$keyとして使います。 (回答No3のコードのような感じです。) 質問文のコードは、質問用に1つのファイルにまとめました。 (フォームで入力した値をmethod=getで受け取る際に文字化けする現象は同じかと。。。)

回答No.2

えっと、 <input type="input" name="key" value="<?=$key ?>">のtypeはinputではなく、textではないですか? 以下サンプル(役に立つかどうか・・・) --- htmlドキュメント <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> </head> <body> <form action="test.php" method="get"> <input type="text" name="key" value="猫"> <input type="submit" value="実行"> </form> </body> </html> --- test.php スクリプト <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML LANG="ja"> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <TITLE>テスト</TITLE> </HEAD> <BODY> <?php if(!isset($_GET['key'])) { print "<P>パラメータはありません。\n"; } else { print "<P>パラメータは " . $_GET['key'] . "\n"; } ?> </BODY> </HTML>

xyz_1990
質問者

補足

ありがとうございます。 サンプルを試してみたのですが、やはりだめでした。 charsetも、shift-jis、euc-jpでも試したのですが、 現象は同じままです。 ブラウザのアドレスバーに表示されるurlの_GET部をデコードすると"猫"が得られるので、デコード前の_GETを取得できれば、対応できそうなのですが。。。

回答No.1

METAタグのcontentでcharsetがecu-jpになってますね。これが原因か分かりませんが・・・。

xyz_1990
質問者

補足

ご回答ありがとうございます。 お恥ずかしい。。。 ただ、euc-jpにもどしても、shift-jisにしても、 状況は同じでした。