- ベストアンサー
phpメールフォームの文字化けとセキュリティについて
- メールフォームがbluemailで文字化けする問題についての解決方法
- phpメールフォームのセキュリティの問題についての考察
- セキュリティ対策が不十分なphpメールフォームの可能性
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
メール本文のエンコードは、 >mb_language("ja"); によって >mb_send_mail() で、ISO-2022JP/BASE64エンコードされているはずなのですけどね。 実際のメールヘッダ・エンコードがどうなっているか見てみてください。 本当にメールがUTF8で来てしまっている場合、mb_language指定を"Japanese"にしてみるとか、メール送信前に明示的に$contentをUTF8→ISO-2022-JP変換してやらないといけないかもしれません。 $content2 = mb_convert_encoding($content2, "JIS"); と入れるとどうなるでしょう?
その他の回答 (3)
- t_ohta
- ベストアンサー率38% (5253/13739)
メールが文字化けするのは文字コードがUTF-8だからでしょう。 日本語メールは昔7bitJISコード(ISO-2022-JP)を使う習わしだったので、文字コードをメールヘッダーで指定しないと7bitJISコードとして処理したりASCIIコードとして処理される場合があります。 メールヘッダーに Content-Type: text/plain; charset="UTF-8" を入れると解消されると思います。 セキュリティ的には入力値のチェックがありませんし、メール送信後のブラウザのリダイレクトにJavaScript使っているのも微妙な感じもしますね。
- memphis
- ベストアンサー率40% (975/2395)
メールのヘッダーが何も指定してないのが原因です。 メール本文の文字コードを明記すれば解決すると思います。
補足
hedderとは $header = 'From: '. mb_encode_mimeheader($name) . '<' .$email .'>'; これでしょうか?
- asciiz
- ベストアンサー率70% (6825/9705)
うーん、記述は特に問題ないように見えますね… あとは、このphpを含むHTML自身がきちんとUTF-8で保存されているかどうかぐらい? >また、このプログラムはセキュリティーてきに危ないですか? うーん、送信メールアドレスにユーザー入力そのまま使っているのが気になるところですが、まあ不正な物が入力されたら送れないだけなのでそれほど問題はありませんかね…。 次のように、正しいメールアドレス形式であるかどうか確認すると、「送信してみて、エラー」を出す前に「メールアドレスがおかしいので送れません」というエラーを出すことも出来るでしょう。 >PHPでメールアドレスをバリデーションする方法を現役エンジニアが解説【初心者向け】 >https://techacademy.jp/magazine/29451
お礼
皆様ご回答ありがとうございます。 うまく行かなかったので、またご質問させていただきます。 その時はよろしくお願いします。