- ベストアンサー
文字化けについて
文字化けで困っています。 教えてください。 下記のようなコードで、フォームに"猫"と入力すると、 "\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>
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
文字コードの自動変換がかかってるのではないですか? mbstring.encoding_translation mbstring.http_input の設定を確認してみてください。 環境変数 $_SERVER['REQUEST_URL'] からkeyの値を取れば 設定変えなくても猫を捕まえられますが。
その他の回答 (3)
- aqucent
- ベストアンサー率39% (78/200)
1つ確認したいのですが、$key はどこから得ることを前提としているのでしょうか? 質問文で掲示されたソースのある場所が test.php?key=%C7%AD とすると、再帰的にGETし続けるので、それはあり得ないと思いますが、 仮に、form.php が質問文のソースだとすれば、$key はどこから得るのでしょう? # 何となく、form.php?key=%C7%AD かな、と想像しますが、確信できません。
補足
どうもです。 本来は、 a.phpでフォームに入力して、 b.phpで$keyとして使います。 (回答No3のコードのような感じです。) 質問文のコードは、質問用に1つのファイルにまとめました。 (フォームで入力した値をmethod=getで受け取る際に文字化けする現象は同じかと。。。)
- joker1969
- ベストアンサー率50% (1/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>
補足
ありがとうございます。 サンプルを試してみたのですが、やはりだめでした。 charsetも、shift-jis、euc-jpでも試したのですが、 現象は同じままです。 ブラウザのアドレスバーに表示されるurlの_GET部をデコードすると"猫"が得られるので、デコード前の_GETを取得できれば、対応できそうなのですが。。。
- joker1969
- ベストアンサー率50% (1/2)
METAタグのcontentでcharsetがecu-jpになってますね。これが原因か分かりませんが・・・。
補足
ご回答ありがとうございます。 お恥ずかしい。。。 ただ、euc-jpにもどしても、shift-jisにしても、 状況は同じでした。
お礼
ありがとうございます。 mbstring.encoding_translationをoffにすることで 解決しました!!