※ ChatGPTを利用し、要約された質問です(原文:フォーム検索先の文字コードが自動的にEUC-JPに)
フォーム検索先の文字コードが自動的に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>
これをどう修正すればいいでしょうか?
稚拙ながら恐縮ですが、ご存じの方がいらっしゃいましたら、ご指摘・ご教授のほどよろしくお願い申し上げます。
お礼
ありがとうございます! PHP側のHTMLのヘッドにメタタグ<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />を挟み込んだら解決しました! 仰る通りHTMLのフォーム側はこれで問題なかったです。 本当に助かりました!ありがとうございます。
補足
回答ありがとうございます。 なるほど、PHP側で取得したPOSTリクエストをmb_convert_encoding関数を用いてUTF-8に変換してから処理する、出力するHTMLにはmetaタグで文字コードを指定してみる、等の方法があるのですね。 少しやり方がわかりませんが試してみます。 Shift-JISへの変換はPHPのURLの回答者様に同じご指摘を受け、修正して解決しました。