- ベストアンサー
メールフォームの文字化け問題 PHPでのISO-2022-JP-MS変換の原因と解決方法は?
- メールフォームページのHTMLで指定している文字コードがUTF-8であるにもかかわらず、一部の文字化けを防ぐためにISO-2022-JP-MSに変換しているが、一部の環境では文章全体が文字化けしてしまう問題が発生している。
- 原因として考えられるのは、受信者側のメーラーの設定やOutlookのバージョンの影響が挙げられる。一部の環境ではメーラーが間違った文字コードを指定してしまう可能性があり、Outlookのバージョンによっても文字化けする場合がある。
- 解決方法としては、受信者側のメーラーの設定変更や、文字コードの指定方法の見直し、あるいはISO-2022-JP-MSではなく別の文字コードに変換するなどの対策が考えられる。具体的な対策方法については、問題が発生している環境や使用しているメーラーによって異なるため、問題の原因を特定し、それに応じた対策を行う必要がある。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ソースが一行も提示されていないので何がどうなっているのか(どういうメールデータを生成しているのか)推測不可能ですが、下記のようなソースを書かれているんですかね? http://d.hatena.ne.jp/t_komura/20091101/1257080705 http://tech.aainc.co.jp/archives/3570 正直、utf-8非対応のメーラが少数になってきているので、mb_language('uni'); でmb_send_mailを使う(utf-8のメールにする)方がよほど楽だと思います。 http://ja.wikipedia.org/wiki/ISO-2022-JP iso-2022-jpのメールでiso-2022-jpの範囲外の文字(iso-2022-jp-ms固有の文字)を「確実に処理してもらう方法」はありません。出来る場合もあるという程度でしょう。丸に1などの文字はフォームからPOSTされた時点でエラー文字として弾くか、いわゆる半角カナをmb_convert_kanaで置換するのと同様に自前で(1)などに置換する(確認画面に表示して置換後の内容を確認してもらってから送信する)ことになります。 というか一般的にメールフォームの主目的は閲覧者からサイト管理者への連絡用なのでサイト管理者の固定された環境へ送信できて内容が確認できればいいんですけどね。 他者への送信を組み込むとスパム判定に引っかからないようにとかいろいろなメーラを考慮するとか面倒なことになります。とりあえずは生成したメールデータがRFCに則った形式になっているかどうかしか判断の根拠はありませんが、その場合にはiso-2022-jp-msは使えません。
その他の回答 (3)
- notnot
- ベストアンサー率47% (4901/10362)
>恥ずかしながらPHPを勉強し始めて1年経たないくらいなので、いまいち旗手依存文字をはじく方法が分からず終いでして(^_^; こんなコードはどうでしょうか。mb_convert_encodingでISO-2022-JPに変換すると、ISO-2022-JPに無い文字は?に変換されるのでそれを調べる。元々ある ? は削除しておく。 $a = 検査対象文字列; if(strpos(mb_convert_encoding(str_replace("?","",$a),"ISO-2022-JP","UTF-8"),"?") !== FALSE){ echo "NG\n"; } ただ、どの文字がNGだったかをユーザーに示してあげないと不親切ですね。そこまでやるのは面倒ですが。
お礼
お礼が遅くなり申し訳ありません。 ご回答ありがとうございました。 今後の参考とさせていただきます。
- bunthit
- ベストアンサー率0% (0/1)
受け取るユーザによって文字化けする問題は、メールヘッダに文字コードの指定がないことが原因だと思います。メーラーによっては自動的に文字コードを認識してくれるのですが、すべてがそうではありません。 メールのヘッダーにContent-Typeヘッダーを追加して文字コードの指定をしてみてください。
お礼
お礼が遅くなり申し訳ありません。 ご回答ありがとうございました。 今後の参考とさせていただきます。
- notnot
- ベストアンサー率47% (4901/10362)
ISO-2022-JP-MSというのは、メールの世界では一般的で無いので、普通はダメでしょう。 逆に認識するメールソフトの方が少数派だと思いますよ。 JISコードの範囲の文字で使うなら、ISO-2022-JP で、これは日本語が使えるメールソフトなら何でも大丈夫です。 それ以外の文字を使う場合はutf-8が普通でしょう。もちろん、utf-8 に対応していないソフトではダメですが、最近は対応しているケースが多いかと思います。
お礼
ご回答ありがとうございます。 >逆に認識するメールソフトの方が少数派だと思いますよ。 そうなんですか!? いやぁ、画期的な機能だなと思って喜んでたんですが・・・(^_^; 本音言うとUTF-8だけにしたいんですが、ガラケーで受けることも考えないといけないんで、JISも選ばざるを得ないんですよね。
お礼
ご回答ありがとうございます。 まさにそのリンク先を見て作りました(笑) その処理を行って、pear:mailで送信するようにしています。 恥ずかしながらPHPを勉強し始めて1年経たないくらいなので、いまいち旗手依存文字をはじく方法が分からず終いでして(^_^; ただ、この事象のように全部が文字化けするくらいなら、特殊記号とかはもう無視して、おおまかでも文章を読める状態にした方が良いのかもしれませんね。何の記号が文字化けしてるかは、文脈から大体想像できるでしょうし。 UTF-8のメールにしたいのは山々なんですが、ガラケーでも文字化けせずに受け取れるのかが不安で・・・。 手持ちのドコモのガラケーだと本文は平気なようですが、タイトルが文字化けしたりするんで、なかなか踏み切れず(^_^;