• ベストアンサー

PHPでのお問い合わせフォームの本文のみが文字化けします。

PHPでのお問い合わせフォームの本文のみが文字化けします。 送受信できるのですが、本文の日本語での内容のみ文字化けします。 アルファベットと数字はちゃんと表示されます。 設定をUTF-8 にしてサーバーをPHP5.0のものを使用しています。 原因不明で困っています。

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

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

質問者はPHPファイルだけに注目しているように見えます(誤解だったらごめんなさい)。 WebサイトというのはPHPファイルやHTMLファイルが混在しているのではないでしょうか。 私だったらあるWebサイトをUTF-8に変更するなら、すべてをUTF-8にしちゃいます。 【PHPファイル】 旧PHPファイルの文字コードをUTF-8に変換し、 htmlコードを吐く部分でシフトJISなどの文字列を見つけたらUTF-8に置換し、 念のためhtmlコードの1文字目を吐くより前に header("Content-type: text/html; charset=utf-8");を発行し、 ファイル保存時もUTF-8を確認して上書き保存します。 【HTMLファイル】 旧HTMLファイルの文字コードをUTF-8に変換し、 ファイル内でシフトJISなどの文字列を見つけたらUTF-8に置換し、 もしないなら<HEAD></HEAD>タブ内に <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> を書き、 ファイル保存時もUTF-8を確認して上書き保存します。 他にもデータベースの文字コードも神経使う部分ですし、 メールを送信するなら回答番号:No.2の通りISO-2022-JPも使用しなければなりませんが、 本件の場合まず上記のステップをテストしてみてはどうでしょうか。 それで良くならなければphp.iniの設定の確認と変更ですね。 筋から行けばまずphp.iniを調整すべきですが、php.iniの調整は精神的に疲れるので 私はあとまわしにしてどうしても必要なときだけ調整するようにしています。 話が前後しますが何よりもまず、Webブラウザで文字化け発生時、ブラウザの[表示]-[エンコード]で各種文字コードを試してみてどの文字コードでまともに読めるか確認、 ブラウザの[表示]-[ソース]でHTMLを生で表示してみて文字コード指定がどうなっているかを確認すれば、解決の糸口になるでしょう。 やってみたことと確認したことの情報を出せる範囲でもう少し詳しく出していただければ、レスポンスがつけやすくなります。

akohghg
質問者

お礼

丁寧なお返事をありがとうございます。 そもそも、問題の4つめのサイトは昔作成したしたものに最近になって後からお問い合わせフォームを加えました。そのサイト作成時には初期のホームページビルダーを使用しました。 それに同じ仕様のままフォームのページだけタグうちで追加作成しました。 このサイトに関しましては、文字コードももちろんですが、最初からもう一度HTMLをきちんとしたものにコーディングしなおしたほうがいいようです。 少し時間がかかるかもしれませんが、再度トライしてみます。

akohghg
質問者

補足

おかげさまで、先日より確認のために、成功した3サイトとの違いを見つけ再試行してみましたら、文字化けなく、送受信も成功いたしました。 原因は、文字コード設定をきちんとできていない事でした。 HTMLのMetaの中だけ変更しただけで、「ファイル」から「文字/改行コード指定保存」をプルダウンメニュのUTF-8を選択して設定してありませんでした。 わかってみるとなんてないことでした。お騒がせしました。 いろいろとありがとうございました。

その他の回答 (4)

回答No.4

私は初心者なのですが、何度も文字化けには苦労させられました。私も同様な経験があります。メールの本文だけが文字化けしたりとか、yahooのWEBメールでは文字化けしていないのに gooのWEBメールでは文字化けしていたりとか・・・。文字化けの原因のほとんどが異なる文字コードで記載されたものが混在していることでした。

akohghg
質問者

お礼

みなさまの回答を拝見してこの質問内容に関しての情報提供が不足していたことから、回答者のみなさまが適切な判断に至らなかったと反省しています。 私自身が全くPHPを理解していません本当の初心者で、お問い合わせフォームに挑戦しています。 4つのサイトにフォームを設置してそのうち3つはちゃんと動いています。PHPの部分だけをコピペーして4つめのサイトへフォームを設置したところこのようになりました。 なので、問題はPHPではなく、文字コードが原因だとは推測できるのですが、送られてきた文字化けした本文は確かにISO-2022-JPとなっていました。 既存のHTMLのページにPHP部分をコピペーして文字コードをShift_JJISからUTF-8へ変更しただけですので、そこに原因があるのだと思います。 なにはともあれ、この質問することに対しても勉強不足だということを再認識いたしました。 みなさまに一括してのお礼となり申し訳ありませんが、回答してくださいましたみなさまありがとうございました。

回答No.3

そもそもマルチバイトが有効になっているのかとか、php.iniでの文字コード設定はどうなっているかとか、ブラウザとのやり取りで文字コードは制御されているかとか、メールをUTF-8のまま送信していないかとか。 要素がありすぎてなんとも...

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.2

インターネットメールでの日本語文字コードは ISO-2022-JP を使うのが原則です。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>設定をUTF-8 にして 送信部分の制御はできますか? というかどの関数やライブラリで送信しているかわかりますか? 単にお問い合わせフォームといわれても・・・ とりあえず設定変更ができるなら本文のエンコードをJISにしてみては どうでしょうか?

akohghg
質問者

補足

PHPの編集のためにUTF-8にして作成したのですが、エンコードをShift_JISに変更するとページ自体からすべてが文字化けになってしまいます。 確認画面のphp部分を記しますが、 <?php $okyakusama=$_POST['onamae']; $mail=$_POST['mail']; $kakunin=$_POST['kakunin']; $toiawase=$_POST['toiawase']; $flg=1; if($okyakusama=='') { print' お名前が入力されていません。<br>'; $flg=0; } if($mail=='') { print'メールアドレスが入力されていません。<br>'; $flg=0; } if($mail!=$kakunin) { print'メールアドレスが違います。<br>'; $flg=0; } if($toiawase=='') { print'お問合わせ内容が入力されていません。<br>'; $flg=0; } if($flg==1) { print'お名前<br>'; print$okyakusama; print'<br><br>'; print'メールアドレス<br>'; print$mail; print'<br><br>'; print'ご用件<br>'; print$toiawase.'<br><br><br>'; print'<form><input type="button" value="戻る" onclick="history.back()" style="width:120px"></form>'; print'<form method="post"action="thanks.php">'; print'<input type="hidden" name="okyakusama" value="'.$okyakusama.'">'; print'<input type="hidden" name="mail" value="'.$mail.'">'; print'<input type="hidden" name="toiawase" value="'.$toiawase.'">'; print'<input name="submit" type="submit" style="width:120px" value="送信">'; print'</form>'; } else { print'<form><input type="button" value="戻る" onclick="history.back()" style="width:120px"></form>'; } ?> 確認画面が表示された時点で、本文の日本語の内容だけが化けています。

関連するQ&A

専門家に質問してみよう