• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ISO-2022-JP-MSに変換してるのに文字化)

メールフォームの文字化け問題 PHPでのISO-2022-JP-MS変換の原因と解決方法は?

このQ&Aのポイント
  • メールフォームページのHTMLで指定している文字コードがUTF-8であるにもかかわらず、一部の文字化けを防ぐためにISO-2022-JP-MSに変換しているが、一部の環境では文章全体が文字化けしてしまう問題が発生している。
  • 原因として考えられるのは、受信者側のメーラーの設定やOutlookのバージョンの影響が挙げられる。一部の環境ではメーラーが間違った文字コードを指定してしまう可能性があり、Outlookのバージョンによっても文字化けする場合がある。
  • 解決方法としては、受信者側のメーラーの設定変更や、文字コードの指定方法の見直し、あるいはISO-2022-JP-MSではなく別の文字コードに変換するなどの対策が考えられる。具体的な対策方法については、問題が発生している環境や使用しているメーラーによって異なるため、問題の原因を特定し、それに応じた対策を行う必要がある。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

ソースが一行も提示されていないので何がどうなっているのか(どういうメールデータを生成しているのか)推測不可能ですが、下記のようなソースを書かれているんですかね? 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は使えません。

noname#235729
質問者

お礼

 ご回答ありがとうございます。  まさにそのリンク先を見て作りました(笑)  その処理を行って、pear:mailで送信するようにしています。  恥ずかしながらPHPを勉強し始めて1年経たないくらいなので、いまいち旗手依存文字をはじく方法が分からず終いでして(^_^;  ただ、この事象のように全部が文字化けするくらいなら、特殊記号とかはもう無視して、おおまかでも文章を読める状態にした方が良いのかもしれませんね。何の記号が文字化けしてるかは、文脈から大体想像できるでしょうし。  UTF-8のメールにしたいのは山々なんですが、ガラケーでも文字化けせずに受け取れるのかが不安で・・・。  手持ちのドコモのガラケーだと本文は平気なようですが、タイトルが文字化けしたりするんで、なかなか踏み切れず(^_^;

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4852/10266)
回答No.4

>恥ずかしながら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だったかをユーザーに示してあげないと不親切ですね。そこまでやるのは面倒ですが。

noname#235729
質問者

お礼

 お礼が遅くなり申し訳ありません。  ご回答ありがとうございました。  今後の参考とさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
  • bunthit
  • ベストアンサー率0% (0/1)
回答No.3

受け取るユーザによって文字化けする問題は、メールヘッダに文字コードの指定がないことが原因だと思います。メーラーによっては自動的に文字コードを認識してくれるのですが、すべてがそうではありません。 メールのヘッダーにContent-Typeヘッダーを追加して文字コードの指定をしてみてください。

noname#235729
質問者

お礼

 お礼が遅くなり申し訳ありません。  ご回答ありがとうございました。  今後の参考とさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4852/10266)
回答No.1

ISO-2022-JP-MSというのは、メールの世界では一般的で無いので、普通はダメでしょう。 逆に認識するメールソフトの方が少数派だと思いますよ。 JISコードの範囲の文字で使うなら、ISO-2022-JP で、これは日本語が使えるメールソフトなら何でも大丈夫です。 それ以外の文字を使う場合はutf-8が普通でしょう。もちろん、utf-8 に対応していないソフトではダメですが、最近は対応しているケースが多いかと思います。

noname#235729
質問者

お礼

 ご回答ありがとうございます。 >逆に認識するメールソフトの方が少数派だと思いますよ。  そうなんですか!?  いやぁ、画期的な機能だなと思って喜んでたんですが・・・(^_^;  本音言うとUTF-8だけにしたいんですが、ガラケーで受けることも考えないといけないんで、JISも選ばざるを得ないんですよね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • iso-2202-jpのメールについて

    メールのヘッダを見てみると、文字コードは、 iso-2202-jpが指定されているのですが、この場合 丸囲みの1は使えるものなのでしょうか。 iso-2202-jpは丸囲みの1を含んでいないと思っているのですが 正常に使うことができています。

  • VS2005C#でメールを受信すると文字化け

    VS2005C#でメールを受信するときに文字コードをiso-2022-jpで変換し、 大抵のメールはこれでOKなのですが、 たまに文字化けしてしまうメールがあります。 しかし普通のメーラーで見ると文字化けせずに見えます。 ヘッダにもiso-2022-jpと書かれています。 C#で受信したときに文字化けしてしまう理由は何かあるのでしょうか? バイトが欠損しているからでしょうか? (そうなら普通のメーラーでも文字化けすると思うのですが)

  • latin-1 (ISO-8859-1)への変換

    教えてください。 latin-1 (ISO-8859-1)への変換になると思いますが、Amazon等にテキストデータを送信するのですが、UTF-8では文字化けします。 artículosなどのaやiの上にダッシュがある文字です。 サーバ側はlatin-1 (ISO-8859-1)で送信するように言っているのですが、そのテキストを作るやり方が不明なので、ご教授願います。 artículosをUTF-8で送信するとartículosのように文字化けします。 アスキーコードが異なるからだと思いますが、どこかのサイトやエディタで変換できますでしょうか? さくらエディタなどは使えなかったので、出来ればWindows環境で変換できる方法をご教授頂きたいです。 よろしくお願いします。

  • PEAR::Mailでエンコードの指定はどうすれば

     PEAR::Mailを使ったメールフォームを作りました。  一般的なUTF-8ではなく、事情があってISO-2022-JP-MSに変換して送ってるもんですから、メーラーによっては文字化けしてしまうようです。  で、メールのヘッダで文字コードを指定してやれば上手くいくみたいな話を教えていただきまして、その方法を探っております。  PHPで作ってるんですが、PHPに用意されてる関mail関数だと参考になるサイトが見つかるんですが、PEAR::Mailでのヘッダで指定する方法がいまいちみつからず、困っている次第です。  そもそもISO-2022-JP-MS自体が特殊なようで、これをこのまま指定しても良いものなのかとか。  shift-jisとして指定する?  その辺も含めてお分かりになる方、よろしくお願いいたします。

    • 締切済み
    • PHP
  • フォームメールを受信すると文字化けをします。

    携帯サイトにCGIフォーム(CGIの文字コードは全てshift_jis)を設置しています。 iMacや、iPatや、ThanderBirdで、受信をすると、すべて、文字化けします。 Macで、POPを返さない方が文字化けをしないと聞いたので、受信アドレスをgmailアドレスに変えましたら、Mac系では、文字化けがなくなりました。 が、同時に、普通のメールアドレスを設置し、ThanderBirdで受信をしましたら、やはり文字化けをします。 ThanderBirdのエンコード設定は、ISO-2022-JP となっていて、少し調べましたら 「インターネットでは7bitの文字コードでやりとりするのが標準なので、日本語の場合は7bitの「JIS(ISO-2022-JP)」という文字コードを使うよう定められている。Shift-JISやEUCは8bitの文字コードなので、送信の際、メールソフトがこれをJISに変換するのが普通だ。」とのこと。 半角カタカナなどは、含まれていないのですが、やはり、フォームメールを受け取りますと、文字化けをしてしまいます。 届いたメールは、タイトルは正しく表記され、中身が、文字化け。 メールのエンコードをShift-JISに変換すると、逆に、タイトルが文字化けし、本文(中身)が、正しく表記されます。 OUTLOOKなどWindowsの仕様のものを試していないのですが、 何かを修正すると、文字化けせずに、閲覧できるのか、もし、方法があれば、おおしえいただければと思いました。 使っていますCGIフォームは http://www.kurohama.net/c5.shtml 今は、Shift-JISですが、UTF-8に変換はできるようです。 どうぞ よろしくお願いいたします。

    • 締切済み
    • CGI
  • メール(iso-2022-jp-2)のデコード

    お世話になります。 C#.NETまたはVB.NETでiPhoneから送られたメールを解析するメーラーを作っているのですが、 charset=iso-2022-jp-2、charset=iso-2022-jp-3で送られてくる場合があり、 そのデコードができずに困っております。 charset=iso-2022-jpですと、下記でデコードできるのですが、 charset=iso-2022-jp-2、charset=iso-2022-jp-3はそもそも Encodingクラスで扱えるエンコーディング名に存在しないので、 どのように変換してよいか分かりません。 string mailtext = "?"; // ←メール内容をそのまま入れます byte[] bytes = Encoding.ASCII.GetBytes(mailtext); string body = Encoding.GetEncoding("iso-2022-jp").GetString(bytes); 宜しくお願い致します。

  • メールの文字化け?

    CGIレスキューのフォームメールを使ってフォームの内容をメールする仕組みを作りました。 ほとんどの方は、文字化けをおこさずに受信できるのですが、1人だけですが文字化けをおこすという報告を受けました。 会社内の特殊なメーラーで読んでいるようですが、そのメーラーには文字コードなどの設定項目はありませんでした。 確かに文字化けするのですが、そこから他に文字化けしたメールを転送すると、受け取った方はちゃんと読むことができます。自分自身に化けたメールをそのまま転送した場合も、化けずにうまく受信できます。 メールサーバー ↓ ある人のメーラー(化けてしまう) ↓ 自分自身に転送する(今度はばけていない) という感じです。 どういった原因が考えられるでしょうか?

    • 締切済み
    • CGI
  • php自動返信メール本文の一部の文字化け

    phpでメールフォームを作成したのですが、自動返信のときの本文の一部が文字化けしてしまいます。 全体が文字化けではなくて一部で、どう対処していいかわからないです。 すいませんがお教えいただけないでしょうか? フォームもphpも文字コードEUCです。 文字化けする本文は 「本メールの最下段にお控えが記載してございます。」 という部分です。 メール送信部分のソースは $rebody=mb_convert_encoding($rebody,"JIS","EUC-JP"); if (get_magic_quotes_gpc()) { $rebody = stripslashes($rebody); } $resbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resbj,"JIS","EUC-JP"))."?="; $reheader="From: $to\nReply-To: ".$to."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); です。 今悩んでて3時間ぐらいいろいろ試したのですがダメでした。 すいませんがよろしくお願いします。

    • 締切済み
    • PHP
  • メール送受信、コード変換

    類似した質問が過去にたくさんあるのですが、、 perlでメールを送受信するプログラムを作成しております。 その時の文字化けに備えメールヘッダや本文はコード変換する 必要があることはわかったのですが、それぞれについてどんな コード変換をしなければいけないのか?またなぜなのか?が良くわかりません。 いろいろなサイトや過去ログを調べてみて、OSの、使用するコード、メーラなど 十人十色だかららしいのですが、 たとえば、日本語を扱う時は、機種に依存しないISO-2022-JP (JIS)にするとか あったのですが、すべてをそれに変換すればよいのでしょうか?? それともSubjectは違うコードが推奨とか、いろいろとルールがあるのでしょうか? 曖昧な質問ですみません。宜しくお願いします。

    • ベストアンサー
    • Perl
  • perlのメールフォームが文字化け

    perlのメールフォームが文字化けして困っています。 メールフォームの出力HTMLは、shift_jis それを、ISO-2022-JPに直して、送信しています。 また、jode.pl、mimew.plを使用しています。 何が原因で文字化けしているのか、教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl