プロが教えるわが家の防犯対策術!

タイトルの通りですが、フォーム検索先の文字コードが自動的にEUC-JPになってしまって困っています。

最終的には、フォームの検索先をUTF-8の文字コードを指定して開きたいです。

UTF-8でphpファイルを作成しました。内容は下記のものです。
(おそらくphpは問題ないと思いますが、一応リンクを載せます)
2つの検索フォームのリーベンシュタイン距離を求める
http://oshiete.goo.ne.jp/qa/7398842.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>

これをどう修正すればいいでしょうか?


稚拙ながら恐縮ですが、ご存じの方がいらっしゃいましたら、ご指摘・ご教授のほどよろしくお願い申し上げます。

A 回答 (1件)

単純にPHP側で取得したPOSTリクエストをmb_convert_encoding関数を用いてUTF-8に変換してから処理するようにしてみてはどうでしょうか。



入力フォームに問題は見られません。
出力するHTMLにはmetaタグで文字コードを指定してあげるなど、文字化けを防ぐ方法はいろいろあります。

また、そのURLにあるソースを拝見しましたが、処理中にShift-JISに変換しているようですが、UTF-8で書いているのであればこのような変換は無意味ではありませんか?今一度ご確認ください。

この回答への補足

回答ありがとうございます。

なるほど、PHP側で取得したPOSTリクエストをmb_convert_encoding関数を用いてUTF-8に変換してから処理する、出力するHTMLにはmetaタグで文字コードを指定してみる、等の方法があるのですね。

少しやり方がわかりませんが試してみます。

Shift-JISへの変換はPHPのURLの回答者様に同じご指摘を受け、修正して解決しました。

補足日時:2012/04/06 08:37
    • good
    • 0
この回答へのお礼

ありがとうございます!

PHP側のHTMLのヘッドにメタタグ<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />を挟み込んだら解決しました!

仰る通りHTMLのフォーム側はこれで問題なかったです。

本当に助かりました!ありがとうございます。

お礼日時:2012/04/06 19:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!