• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPのsendmailでの文字化けについて)

PHPのsendmailでの文字化けについて

このQ&Aのポイント
  • PHPのsendmailでの文字化けについて
  • PHPのsendmailを使用してメール送信する際に、特殊文字が?に変換される現象や、全角文字の文字化けが発生する問題があります。
  • これらの問題に対処するためには、特殊文字の変換や文字数制限の確認を行う必要があります。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

> 質問1 mb_language("Japanese")で使われる文字コード「ISO-2022-JP」では、(1)や(株)は使えません。 そういう文字をメールにどうしても使いたいのでしたら、mb_language("uni")して ISO-2022-JPではなくUTF-8でメールを送るようにしてください。 それと、その場合は mb_internal_encodingも"SHIFT-JIS"ではなく"SJIS-WIN"にする必要があります。 > 質問2 インターネットメールの規格では、1行は「998バイトを超えていけない」「78バイト以内が望ましい」ことになってます。 http://srgia.com/docs/rfc5322j.html#p2.1.1 ISO-2022-JPの場合は、全角文字1文字が2バイトで、全角文字と半角文字の間に3バイトのシーケンスが必要になりますので、496文字弱が1行の文字数の上限になります。 (半角全角を織り交ぜると、これより短くなる) UTF-8を選んだ場合は、全角1文字は3バイトですので、333文字ぐらいが上限に。 できれば、ちゃんと、78バイト(39文字)以内で改行するように整形しましょう。

coogon21
質問者

お礼

ご回答ありがとうございました。

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

その他の回答 (1)

  • Hohenheim
  • ベストアンサー率18% (43/237)
回答No.1

質問1 (1)とか(株)などは特殊文字ではなく、SJIS-WINで定義されている外字です。送信したとしても相手側で読めるとは限りませんので、送信前に警告を出すのがセオリーです。 mb_convert_encoding関数を使って、対象文字列をISO-2022-JPへ変換した際、変換できない文字については警告を出すべきでしょう。 質問2 改行コードはLFで、70文字以内で改行していますか? ご確認ください。

coogon21
質問者

お礼

ご回答ありがとうございます。 > mb_convert_encoding関数を使って、対象文字列をISO-2022-JPへ変換した際、変換できない文字については警告を出すべきでしょう。 具体的にはどうやって、変換できる、できないを判断するのでしょうか? > 改行コードはLFで、70文字以内で改行していますか? 改行なしで、500文字くらいで送信しようとした時に文字化けしました。 1行○○文字以内みたいな制約があるのでしょうか?

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