網頁

2010年9月22日 星期三

如何解決PHP使用utf8編碼寄Email時寄信者跟信件標題有中文時會出現亂碼

您如果是用UTF8的編碼寫寄Email的功能,會發現信件寄出時,寄信者跟信件標題有中文時會出現亂碼,但是信件內容的中文則正常,這是因為,電子郵件標準格式中,表頭的部分不允許使用雙位元的文字,所以必需使用mb_encode_mimeheader()函式將雙位元文字編碼為單位元字串,因mb_encode_mimeheader()預設的字串編碼為西方ISO-8859-1,而我們使用UTF-8編碼所以程式中必需使用mb_internal_encoding()將內部預設編碼改為UTF-8。


1.寄件者跟信件標題有中文會出現亂碼,但是信件內容的中文則正常


2.程式碼(點圖可看比較清楚


<?
mb_internal_encoding('UTF-8');
$mail_from=mb_encode_mimeheader("彰化一整天的Blog",'UTF-8')."<imingho@gmail.com>";
$mail_to=mb_encode_mimeheader("收件人中文姓名",'UTF-8')."<收件人Email>";
$mail_subject=mb_encode_mimeheader("寄信標題",'UTF-8');
$mail_headers="MIME-Version: 1.0\r\n"."Content-type: text/html; charset=utf-8\r\n"."From: $mail_from\r\n";
$mail_headers.="bcc:密件收件者Email\r\n";
if (mail($mail_to, $mail_subject, $mail_message, $mail_headers)<>true)
{
   echo "<font color=red> 寄送失敗!!</font>";
}
?>
參考資料:使用PHP mail()寄送UTF-8編碼之電子郵件

沒有留言:

張貼留言

可以麻煩您將問題縮小成一個問題(使用範例資料),到我的論壇http://discuz.bestdaylong.com註冊發問,
,因為太多人直接發問,我無法一一回覆,但是您們的問題有可能是其他人也會遇到的,在論壇可以上傳檔案及圖片方便說明及回答問題,請說明處理前跟處理後及中間的處理原則。

discuz 論壇如何註冊及發問問題
http://discuz.bestdaylong.com/thread-32325-1-1.html
discuz如何在回文時上傳圖片
http://discuz.bestdaylong.com/thread-1920-1-3.html

如果您在使用上還有其他疑問或是建議批評,歡迎您來信指教