2011年5月2日月曜日

PHPで半角カタカナも機種依存文字もそのままメール送信

PHPで、mb_send_mail() を使ってメールを送信していましたが、
半角カタカナや①や㎡など機種依存文字が入ると?に文字化けする問題がありました。

iso-2022-jp で扱うことができないことになっているので、
普通ならば iso-2022-jp で扱える形式に変換するところですが、
思い切って無視して「そのまま」送信することで今回問題回避しました。

参考にしたのは次のサイト
http://d.hatena.ne.jp/u87/20100308/

mb_language('ja');
mb_internal_encoding('UTF-8');
$e_subject = mb_encode_mimeheader($subject);
$e_body = mb_convert_encoding($body, 'ISO-2022-JP-MS');
$mail_header = "From: ".mb_encode_mimeheader(mb_convert_encoding("フロム","JIS","UTF-8"))."<".$from.">"."\n";
$mail_header .= "Content-Type: text/plain; charset=ISO-2022-JP\r\n";
$mail_header .= "Content-Transfer-Encoding: 7bit";
mail($to, $e_subject, $e_body, $mail_header, "-f $from");

ポイントは mb_send_mail()を使わずに、mail()を使います。
また、iso-2022-jp を宣言しておいて、iso-2022-jp-ms で変換します。
一般的な日本語環境であれば、問題なく文字化けのないメールを見ることができると思います。

0 件のコメント:

コメントを投稿