mb_encode_mimeheaderで文字化けするときの対処方法
目次
フォームに入力された内容をPHPのmb_send_mailでメールの送信をしようと、以下のようなスクリプトで送信したらmb_encode_mimeheaderで指定した文字が文字化けしました。
<?php mb_language( "Ja" ) ; $subject = "◯◯の件について" ; $subject = mb_convert_encoding( $subject , "iso-2022-jp" , "auto" ); $content = "A様\nこの度はありがとうございました。\nBより" ; $content = mb_convert_encoding( $content , "iso-2022-jp" , "auto" ); mb_send_mail( $to , $subject , $content , $from ); ?> |
これで送信したら、以下のようなメールが届きました。
From: 綏??坂査鐚 <[email protected]>
To: 鐚≧? <[email protected]>
件名: ◯◯の件について
本文:
A様
この度はありがとうございました。
Bより
原因
サーバーの内部エンコーディングとmb_encode_mimeheaderで使う文字は同じエンコーディング同士じゃないと文字化けするようです。今回の環境では以下のエンコーディングとなっています。
- 内部エンコーディング:EUC-JP
- フォームの入力値:UTF-8
- メール送信:ISO-2022-JP
対処方法
- 内部エンコーディング:EUC-JP
- フォームの入力値:EUC-JP
- メール送信:ISO-2022-JP
となるように、mb_encode_mimeheaderに使う文字列を内部エンコーディングに合わせて『EUC-JP』にしてみました。
<?php mb_language( "Ja" ) ; $to = mb_convert_encoding( "A様" , "euc-jp" , "auto" ); $subject = "◯◯の件について" ; $subject = mb_convert_encoding( $subject , "iso-2022-jp" , "auto" ); $content = "A様\nこの度はありがとうございました。\nBより" ; $content = mb_convert_encoding( $content , "iso-2022-jp" , "auto" ); $from = mb_convert_encoding( "差出人B" , "euc-jp" , "auto" ); mb_send_mail( $to , $subject , $content , $from ); ?> |
すると正常なメールが届きました。
From: 差出人B <[email protected]>
To: A様<[email protected]>
件名: ◯◯の件について
本文:
A様
この度はありがとうございました。
Bより