全体表示

[ リスト ]

[PHP]メール送信でwindows機種依存文字の文字化けを防ぐ

PHPを利用したメールフォームで、入力されたwindows機種依存文字を文字化けせずに正しく送信するソースです。

mb_send_mail()は機種依存文字は正常に送れないようです。使用は楽なんですが・・・。
したがって mail()関数を利用して自前でエンコーディングしてあげる必要があります。
だからといって特に手間ではありません。

エンコードを上手く指定しないと
日本語のタイトルが文字化けしたり、送信者(from)が「=?iso-2022-jp?B?wBg....」とかになったり。

色々調べたけど結局は以下のようにすれば正しく送信できました。


ちなみに、ウチの環境は以下の通りです。
PHPバージョン:5.2.11
PHPの文字コード:EUC-JP
サーバ:どっかのLINUX
mbstring.http_input:pass
mbstring.http_output:pass
mbstring.internal_encoding:no value
mbstring.language:Japanese


※PHPファイルは[EUC-JP]で作成しています。

function send_mail($toAddr, $subject, $body)
{
  //メールエンコーディング
  mb_language("ja");
  mb_internal_encoding("euc-jp");

  //FROM
  $from = "From:" . "auto@yahoo.co.jp";

  //subjectエンコード
  $subject = mb_encode_mimeheader($subject,"SJIS-WIN");

  //本文エンコード
  $body = mb_convert_encoding( setLf($body), "SJIS-WIN", "EUC-JP");

  //メール送信
  mail($toAddr, $subject, $body, $from);

}

※上記プログラム内の setLf() は単にCRLFやCRを全てLFに置換する関数です。
改行はLFのみで送信するのが規格上、正しいようです(どっかに書いてあった)。



決め手は「SJIS-WIN」と指定してやる事です。これを指定したらいきました。

「ISO-2022-JP-MS」とかも試したけど機種依存文字は正しくメールで表示されましたが
送信者欄がデコード不良で駄目でした。

※ちなみにメールの受取手がウィンドウズを使用する事が前提となります。
ウインドウズの機種依存文字の表示だから当然といえば当然ですが。

閉じる コメント(0)

コメント投稿
名前パスワードブログ
投稿

閉じる トラックバック(1)

トラックバックされた記事

phpのmb_send_mail()と機種依存文字

phpにはmb_send_mail()という便利なメール送信用の関数があるが、これでメール送ると機種依存文字(〓とか)は見事に化ける。 この場合は、subjectとかだったらmb_encode_mimeheaderで、本文とかだったらmb_convert_encodingで”SJIS-WIN”に自前でエンコーディングした上で、mb_send_mail()の代わりにmail()を使えばよい。 あんまりPHP弄ることがないので、備忘録として。 参考:[PHP]メール送信でwind...

2010/8/17(火) 午後 4:33 [ ta6b log ]

トラックバック先の記事

  • トラックバック先の記事がありません。


.

ほげほげ
人気度

ヘルプ

Yahoo Image

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

ケータイで見る

モバイル版Yahoo!ブログにアクセス!

モバイル版Yahoo!ブログにアクセス!

URLをケータイに送信
(Yahoo! JAPAN IDでのログインが必要です)

  今日 全体
メンテナンス中 - -
メンテナンス中 - -
メンテナンス中 - -
メンテナンス中 - -

開設日: 2008/5/17(土)


プライバシーポリシー -  利用規約 -  ガイドライン -  順守事項 -  ヘルプ・お問い合わせ

Copyright (C) 2012 Yahoo Japan Corporation. All Rights Reserved.