• ベストアンサー

文字化けについて

文字化けで困っています。 教えてください。 下記のようなコードで、フォームに"猫"と入力すると、 "\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>

  • PHP
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
  • 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にしても、 状況は同じでした。

関連するQ&A

  • jspの文字化けの解消方法を教えてください

    input.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="result.jsp" method="post"> <input type="text" name="name"> <input type="submit" value="送信" name="submit"> </form> </body> </html> result.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> あなたの名前は<c:out value="${param.name}" />です。 </body> </html> 以上のJSPにおいてinput.jspを実行して表示されるフォームに 日本語を入力するとresult.jspにおいてその出力が文字化けします。 この問題の解消方法を教えてください。

    • ベストアンサー
    • Java
  • 違う文字コードのページへFORMデータを送る時

    いつもお世話になっております。 EUC-JP のページからx-euc-jpのページへFORMを使いデータを渡しているのですが、どうも受け取り側で渡したデータが文字化けを起こしているようなのです。 原因が分かる方がいたら、ご教授下さい。 <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <script type="text/javascript"> <!-- function sent2() { document.INPUT.submit(); } // --> </script> </HEAD> <BODY onload="sent2()"> <form name="INPUT" METHOD="POST" action="http://okwave.jp" ENCTYPE="text/plain"> <input type="hidden" name="arr1" value="555006303003"> </form> </BODY> </HTML>

  • このソースどういう意味ですか【JavaScript】

    <HTML> <HEAD> <TITLE>JavaScript Sample</TITLE> <META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript"> </HEAD> <BODY> : <INPUT TYPE="button" VALUE="OK" onClick="~"> : </BODY> </HTML> このソースの中の <META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript"> の部分ってどういう意味ですか? 特にTypeとHTTP-EQUIVの部分については個別で詳しく知りたいです。 回答よろしくお願いします。

  • 表示すると文字化けします

    下記のファイルが表示されると文字化けしてエンコードを修正しないとみれませんなぜでしょうか? 日本語EUCになってしまします。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY> <TABLE border="1"> <TBODY> <TR> <TD bgcolor="#ffff00" width="699"><B><FONT size="+2">登録ありがとうございました</FONT></B></TD> </TR> <TR> <TD height="99" width="699"><B>■<A href="http*************************">使いこなすために</A>手順に沿って進んでください</B>→<A href="http**************************">次へ進む</A></TD> </TR> </TBODY> </TABLE> </BODY> </HTML>

    • ベストアンサー
    • HTML
  • 初歩的な質問で恐縮ですが、教えてください。

    すみませんが、教えてください。 入力フォームでデータが送れなくて、困っています。 下のコードに問題点はあるのでしょうか? 自分では、分からないので、よろしくお願いいたします。 test1.php------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> </head> <body> <form method="post" enctype="multipart/form-data" action="./test2.php"> <input type="text" name="fmTitle" ><br /> <input type="submit" value="次へ" > </form> </body> test2.php-------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> </head> <body> <?= $fmTitle . "<br />" ?> </body>

    • ベストアンサー
    • PHP
  • フレームページに文字が表示されなくて困ってます><

    フレームページに文字が表示されなくて困ってます>< フレームページは表示されるのですがmenu.html.htmlやcontents.html.htmlに書いた文字が表示されません どこが間違っているのでしょうか? ーーフレームページーー <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>タトル</TITLE> </HEAD> <FRAMESET cols="100,*"> <FRAME name="menu.html.html" src="file:///D:/happystyle/menu.html.html"> <FRAME name="contents.html.html" src="file:///D:/happystyle/contents.html.html"> <NOFRAMES> <BODY> <P>このページを表示するには、フレームをサポートしているブラウザが必要です。</P> </BODY> </NOFRAMES> </FRAMESET> </HTML> ーーmenu.html.htmlーー <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <HTML> <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> 画像置き場 </BODY> </HTML> ーーcontents.html.htmlーー <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <HTML> <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> 画像表示 </BODY> </HTML> というHTMLを書きました! フレームに表示させたいページのHTMLはフレームと同じフォルダに入っているのですがこれと関係ありますか? どこがおかしいのかまったくわからないです 教えてください!

  • フォームで送った文字がおかしくなる

     フォームから文字を記入して、送信ボタンを押すと次のページでその文字が表示されるという初歩的なプログラムをつくっています。しかし、フォームからPOSTでデータを送る場合、ある特定の一文字の漢字だけを記入して送信ボタンを押すと正常に表示されません。 例えば、「卒業」だと正常に表示されるのに「卒」だと「'」になってしまい、他にも「文」や「動」を一文字だけ記入すると、何も表示されません。ひらがなやカタカナ、複数文字の場合は全て正常です。原因が分からなくて困っています。 a.php (入力フォーム) <HTML> <HEAD> <TITLE>テキスト送信のテスト </TITLE> <META http-equiv="Content-Type" content="text/html; charset=EUC_JP"> </HEAD> <BODY> <FORM method="POST" action="view.php"> 入力してください: <INPUT type="text" name="name"> <BR> <INPUT type="submit" value="送信"> </FORM> </BODY> </HTML> view.php (表示するphpファイル) <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC_JP"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY> <?php print $_POST["name"]; ?> </BODY> </HTML> どこか間違いがあるでしょうか? a.phpとview.phpは両方とも日本語(EUC)改行=LFで保存しています。 phpのバージョンは5.1.1です。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 変数を渡して新しいウィンドウで表示させるには

    http://iskiso3.hustle.ne.jp/i.php 上のページのように最初のページで入力してもらった変数を次のページにPOSTで渡すことは出来るのですがこのときに新たなウィンドウで結果を表示させるにはどのようにスクリプトを書き換えたらよいのでしょうか? JAVAを使えば出来るということまではわかり試行錯誤してみたのですが変数が渡されなかったり問題がおきてしまいました。 一応上記のページのスクリプトは 最初のページが ------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>test</title> </head> <body> <form action="o.php" method="post"> メッセージを入力してください。<br> <input type="text" name="mes" size="30"> <input type="submit" value="送信"> </form> </body> </html> ------------------------------------- で、2番目のページが ------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>test</title> </head> <body> <?php $mes = $_POST['mes']; echo "$mes"; ?> </body> </html> ------------------------------------- というようになっています。 ご教授よろしくお願いいたします。

    • ベストアンサー
    • Java
  • htmlが文字化け

    掲題の件について質問させて頂きます。 linuxサーバ(CentOs5)を立ち上げて、apacheをインストールし、DocRootにhtmlファイルをFFFTPにてアップロードした所、文字化けが発生してしまいました。(画面が真っ白になります) 【環境】 Server: Apache/2.2.6 (Unix) mod_ssl/2.2.6 or_log PHP/5.1.6 【アップロードしたファイル内容】 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>ここにタイトルを挿入</title> </head> <body> <form method="post" action="input_check.php" name="input_check"> <input type"text" name="name">お名前: <input type"text" name="furigana">ふりがな: <input type="submit" name="send" value="submit"> </form> </body> </html> ファイルはEUC-JPにて記述しています。 以下試した点をあげてみます。 1. charsetをShift_JISに変更。 ⇒ファイルがEUC_JPで書かれているので当然文字化け。ですが文字化けされた文字は表示されました。(画面が真っ白ではないです。) 2. apacheのhttpd.confのAddDefaultCharsetをコメントアウト ⇒(というよりデフォルトで設定されていませんでした。) 他に何か怪しまれる点はありますでしょうか? 以上宜しくお願い致します。

  • Apache+TomcatでGET送信すると文字化けする

    下記の構成で開発をしています。 Apache2.0.54 j2sdk1.4.2_08 Tomcat5.0.28 JK2 Tomcat単独では、GETで送信した日本語でも取得できましたが、 Apacheを通すと文字化けしてしまいます。 何か良い解決方法等ありましたらお教えください。 【送信】 <form action="test.jsp" method="GET"> <INPUT type="text" name="test" value="てすと" /> <input type="submit" value="submit"> </form> 【受信】 <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <% request.setCharacterEncoding("UTF-8"); String sTest = ""; sTest = request.getParameter("test"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> <title>test</title> </head> <body> <%= sTest %> </body> </html> 【表示結果】 てすと.

専門家に質問してみよう