フォーム検索先の文字コードが自動的にEUC-JPになってしまって困っています

このQ&Aのポイント
  • フォーム検索先の文字コードが自動的にEUC-JPになってしまって困っています。最終的には、フォームの検索先をUTF-8の文字コードを指定して開きたいです。
  • phpファイルをUTF-8で作成し、FC2ブログのプラグインを使用してフォームアクション先を設置しました。しかし、検索先の別ウィンドウが自動的にEUC-JPの文字コードで読み込まれてしまい、文字化けが発生します。
  • FC2のテンプレートのメタ部分やHTMLフォームの属性を変更しても、検索出力先がEUC-JPになってしまいます。どのように修正すれば良いでしょうか?
回答を見る
  • ベストアンサー

フォーム検索先の文字コードが自動的にEUC-JPに

タイトルの通りですが、フォーム検索先の文字コードが自動的にEUC-JPになってしまって困っています。 最終的には、フォームの検索先をUTF-8の文字コードを指定して開きたいです。 UTF-8でphpファイルを作成しました。内容は下記のものです。 (おそらくphpは問題ないと思いますが、一応リンクを載せます) 2つの検索フォームのリーベンシュタイン距離を求める http://okwave.jp/qa/q7398842.html 上記のPHPにアクセスするように、FC2ブログのプラグイン(HTML編集にて)で、下記のようにフォームアクション先を設置しています。 (仮にここでは2つの検索フォームに名前を入れるものとします) <form name="formleven" method="post" form action = "http://〇〇.〇〇.jp/php/formleven.php" target="_blank" style="margin:0;padding:0;" onsubmit="return false;" accept-charset="utf-8"> 名前1:<input type="text" name="nm"> と 名前2:<input type="text" name="nm2">    <input type="submit" name="exec" value="検索" onclick="document.charset='utf-8'; document.formleven.submit();" /> </form> 仮に 名前1に「あō å 1g」 名前2に「いš ë ā 」 と入力します。(日本語、アクセント文字、ローマ字などの混合文字でも対応できるように) 本来ならば、『(名前1)と(名前2)は◯%マッチ』と表示されるはずなのですが、 これで検索すると、検索先の別ウィンドウが自動的にEUC-JPの文字コードで読み込まれてしまい、下記のように文字化けします。 ��� 奪 鐚�鐔� �� ��邸 谷 � �� 1鐚� ������(6) ブラウザの文字コードを「UTF-8」に戻すと下記のように正常に表示されます。 あō å 1g と いš ë ā は 1% マッチ(6) ちなみにローカルサーバーや有料サーバーで実験した際には、勝手にEUC-JPの文字コードが出力先になったりはしませんでした。(もちろんPHPはUTF-8で作成し、EUC-JPは使っていません。) またフォームの「accept-charset="utf-8"」の部分を抜くと、検索フォームの入力文字は正常に表示される(出力先が勝手にEUC-JPにされるため)のですが、「と」「は」「%マッチ」のUTF-8で書かれたPHPファイルの文字列が文字化けします。 どうやらFC2自体がEUC-JPなようで、FC2のプラグイン(HTML編集)経由でなってしまうようです。 そこでFC2のテンプレートの冒頭のメタ部分を <?xml version="1.0" encoding="EUC-JP"?> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> ↓ <?xml version="1.0" encoding="UTF-8"?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> と書き換えてもみたのですが、やはり結果は同じように勝手に検索出力先がEUC-JPにされてしまいます。 HTMLフォームのmethod="post"の部分をmethod="get"に書き換えると、出力先は問題なくUTF-8で表示され文字化けは起こらなくなりますが、検索フォームに入力した文字列のリーベンシュタイン距離の計算ができなくなります。数値が全て「0」になってしまいます。 (おそらく出力先はUTF-8なのですが、入力文字がEUC-JPになって文字化けして、PHPへと受け渡されるので計算できないのだと思います。) これらのことから察するに、FC2プラグイン(HTML)に設置した検索フォームの方(あるいはテンプレート?)に問題があると思うのですが、 <form name="formleven" method="post" form action = "http://〇〇.〇〇.jp/php/formleven.php" target="_blank" style="margin:0;padding:0;" onsubmit="return false;" accept-charset="utf-8"> 名前1:<input type="text" name="nm"> と 名前2:<input type="text" name="nm2">    <input type="submit" name="exec" value="検索" onclick="document.charset='utf-8'; document.formleven.submit();" /> </form> これをどう修正すればいいでしょうか? 稚拙ながら恐縮ですが、ご存じの方がいらっしゃいましたら、ご指摘・ご教授のほどよろしくお願い申し上げます。

  • walsch
  • お礼率89% (224/250)
  • HTML
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

単純にPHP側で取得したPOSTリクエストをmb_convert_encoding関数を用いてUTF-8に変換してから処理するようにしてみてはどうでしょうか。 入力フォームに問題は見られません。 出力するHTMLにはmetaタグで文字コードを指定してあげるなど、文字化けを防ぐ方法はいろいろあります。 また、そのURLにあるソースを拝見しましたが、処理中にShift-JISに変換しているようですが、UTF-8で書いているのであればこのような変換は無意味ではありませんか?今一度ご確認ください。

walsch
質問者

お礼

ありがとうございます! PHP側のHTMLのヘッドにメタタグ<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />を挟み込んだら解決しました! 仰る通りHTMLのフォーム側はこれで問題なかったです。 本当に助かりました!ありがとうございます。

walsch
質問者

補足

回答ありがとうございます。 なるほど、PHP側で取得したPOSTリクエストをmb_convert_encoding関数を用いてUTF-8に変換してから処理する、出力するHTMLにはmetaタグで文字コードを指定してみる、等の方法があるのですね。 少しやり方がわかりませんが試してみます。 Shift-JISへの変換はPHPのURLの回答者様に同じご指摘を受け、修正して解決しました。

関連するQ&A

  • フォームの文字コードについて

    phpについて質問なんですが、<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">となっているページのフォームの内容の文字コードをphp側で確認すると、文字コードが「EUC-JP」となっています。 これはこういうものなのでしょうか? ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • フォームで送った文字がおかしくなる

     フォームから文字を記入して、送信ボタンを押すと次のページでその文字が表示されるという初歩的なプログラムをつくっています。しかし、フォームから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
  • 違う文字コードのページへ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>

  • フォーム内だけで"EUC-JP"を使う具体的なソースを教えてください

    フリーのショッピングカートを使って ー-------------------------- <form method="post" action="http://xxx.com/web_cart/cart.php" accept-charset="EUC-JP"> <div align="center"><img src="http://xxx.com/web_cart/img.php?path=./item_img/1_0.jpg&scale=150" width="188" height="188" border="0" /><br /> カラー: <select name="i_opa_value"> <option value="白">白</option> <option value="青">青</option> </select><br /> 数量: <select name="i_cnt"> <option value="1">1</option> <option value="2">2</option> </select> <br /> <input type="submit" value="カートに入れる"> <input type="hidden" name="cart_md" value="in"> <input type="hidden" name="i_num" value="1"> </div> </form> ー-------------------------- というソースの白、青という文字を"EUC-JP"で 送らなければならないですが、上記の内容だとIEで うまく動きません。 http://search.web-sun.com/zatu/charset.html も教えていただいたのですが、試行錯誤もむなしく、 実現できない状態です。 図々しいのですが、具体的なソースを教えていただけると 大変助かります。

    • ベストアンサー
    • CGI
  • EUC_JP と EUC-JP

    ここでの質問して良いものかと思いましたが、質問させてください。 phpのファイルを見ているとcharset="EUC-JP"が多いですが、 charsetのコードは『EUC_JP』 と 『EUC-JP』のどれで記入するのが正しいのでしょうか?

    • ベストアンサー
    • PHP
  • ジオシティーズで作るのならeuc-jp?

    yahooジオシティーズでHPを作る際は、絶対に <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp"> ってやらないとうまくひょうじできないのでしょうか? <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp"> をしないでIEで表示しようとすると文字化けしてしまいます。

    • ベストアンサー
    • HTML
  • ボタン別でフォームの送信先を変えたい

    同じ場所に3つある今のフォームを1つにまとめたいのですが、 「ラジオボタン」でやるのではなく「submitボタン」によって送信先の振り分けはできないのでしょうか? CGIなどを使って一旦クッションを置くのは問題ないです。何か参考になるサイトさんとかありましたら教えてください。 <form action="1.php" method="get" class="form" target="a" name="1"> <input type="hidden" name="s" value=90 /> <input type="hidden" name="t" value="e" /> <input type="text" name="moji" value="" size="8" /> <input type="submit" name="button" value="検索" /> </form> <form action="http://e.php" method="get" name="2" target="a"> <input type="hidden" name="test" value=et /> <input type="text" name="77" value="" size="8" /> <input type="submit" value="検索2" class="button" /> </form> <form action="http://8.cgi" method="get" target="a"> <input type="text" size="8" name="q" value="" /> <input type="submit" value="検索3" class="button" /> <input type="hidden" name="sut" value="JJ" /> </form>

    • ベストアンサー
    • CGI
  • LIKE述語/SQLとPHPを使った検索フォーム

    SQLを使って、「名前」(カラム名=name)と「コメント」(カラム名=comment)のテーブルを作りました。 このテーブルに対して、検索フォームを作りました。 このフォームに名前を入力すると、該当する行が検索されるようにしました。 ◆入力フォーム form.php <form action = "kensaku.php" method="post"> 名前:<input type="text" name="name"> <input type="submit" name="submit" value="検索"> </form> ◆検索結果 search.php <?php function connect() { return new PDO("mysql:dbname=★;host=★","★","★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM table WHERE name='" . $_POST["name"] . "' "); $address = $st->fetchAll(); ?> <?php foreach ($table as $g) { ?> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 14.0.8.0 for Windows"> <p>名前<?php echo $g['name'] ?></p> <p>コメント<?php echo $g['comment'] ?></p> <?php } ?> ここで、該当する文言の一部でも検索できるようにしたいです。 ※例えば、「山田太郎」を検索する場合に「山」だけでも検索できるように。 LIKEを使えばよいかと思い、 $st = $pdo->query("SELECT * FROM table WHERE name='" . $_POST["name"] . "' ");を $st = $pdo->query("SELECT * FROM table WHERE name LIKE='%" . $_POST["name"] . "%' "); と、記述してみましたがだめでした。 どのように記述すればよいか教えていただけないでしょうか。 何卒お願いします。

    • ベストアンサー
    • MySQL
  • XHTMLの文字コードのEUC-JPの文字化け

    いつもはHTML4.01で作業をしていて XHTMLはどうも不慣れなせいか 今、外注が作成したHPを修正していて 文字コードをEUC-JPにどうしても変更しなければならないのですが それがうまくいかず、文字化けが発生してます。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> を <?xml version="1.0" encoding="euc-jp"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> このように設定したら文字化けが発生しました。 どのように設定したら文字化けがなくなりますか?

  • PHP初期文字コードの変更に伴うエラーについて

    現在サーバーをレンタルしてホームページを作っているのですが、 今回サーバーの契約を変更したことにより、 PHPの初期文字コードが【EUC-JP】から【UTF-8】に変更になりました。 これまでページ内で使っていたPHPのメールフォームでエラーがでるようになってしまいました。 構成としては、 mail.html(入力)→mail.php(確認画面&送信完了画面)と、 htmlからphpにデータを渡しています。 メールフォームの入力画面がから確認画面へいくとき、 名前や住所など、nameが日本語のものが表示されません。 <input name="郵便番号" id="zip" type="text" value="" size="10" /> 調べてみて、phpの最初に mb_language("Japanese"); mb_internal_encoding("EUC-JP"); と記述しましたが変化はありません。 現在あるメールフォームもフリーのフォームを拝借して少しだけ カスタマイズしているので、あまりPHPが分かりません。 どなたか教えていただけないでしょうか? よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう