- ベストアンサー
環境依存文字の「ハート」マークを送信すると文字化け
- フォームの入力欄に環境依存文字の「(ハート)」マークを入力し、「送信」と表示されたボタンを押すと、画面上のボタンは全て消えてしまい、「(ハート)」マークと入力した欄には、「⊇」と表示されて他の入力欄に表示されるはずの日本語文字が文字化けした状態で表示されます。表示のみとなる日本語部分や半角表示部分は文字化けしていません。
- 「送信」を押された場合のロジックにprint($_POST['submit']);でボタンの名称表示を入れてみると「送信」ではなく「瘧竅」と表示されます。 「送信」ボタンのhtmlソースは、次のような書き方です。<input name="submit" value="送信" type="submit" />
- 「(ハート)」マークと入力して送信を押した場合でも、ボタンが消えず、「送信」を押しても$_POST['submit']の中身が「送信」となるようにするにはどうしたらよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
UTFへの変更は設定だけでなく、 日本語を使っているファイルは全てUTFに変換して保存しないと文字化けします。
その他の回答 (1)
- memphis
- ベストアンサー率40% (975/2395)
フォームの文字コードがEUCなのに、ハートマーク(UTFの文字コード)を使おうとしているのが原因でしょう。 フォームをEUCからUTFに変更すればハートマークも使えるようになります。
お礼
ご回答ありがとうございます。 下記の内容のみ変えてみたら画面の大半が文字化けしていましたが、入力欄に「ハート」マークを入力して「送信」ボタンを押したら全てのボタンはいまだに消えしまい、画面の大半は文字化けした状態ですが、入力欄に「ハート」マークが表示されたままとなりました。 どうすれば画面全体が文字化けせずにハートマークも使えるようになるのでしょうか? (1)HTMLソースの記述 <Meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> ↓ <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> (2)php.iniの設定 mbstring.internal_encoding = EUC-JP ↓ mbstring.internal_encoding = UTF-8 mbstring.detect_order = EUC-JP,SJIS,JIS,UTF-8,ASCII ↓ mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII (3)プログラムソース(画面を表示する直前の処理) header('Content-Type: text/html; charset=EUC-JP'); ↓ header('Content-Type: text/html; charset=UTF-8');
お礼
ご回答ありがとうございます。 関連する全てのファイル(PHPのソース)がEUC-JPで保存されています。 これらのファイルを日本語も含めてUTF-8に一括変換をしたい、もしくは指定した一つのファイルに対して一つ一つの手直し無しでUTF-8に一括変換したいのですが、よい方法はないのでしょうか? 私の知識では、エディッタでソースを開き、UTF-8に読み込み直して、日本語部分を一つ一つ入力し直し、保存する方法しか分かりません。
補足
あれから自分なりに調べて試行錯誤したところ、全てのファイルをUTF-8に一括変換したところ、 ハートマークは処理で扱えるようになりましたが、SJISのDBへはさすがにINSERTできませんでした。 本当に助かりました。 ありがとうございました。