2009年3月9日 星期一

PHPMailer utf-8郵件主旨亂碼問題

日前使用PHPMailer發送utf-8格式的中文郵件時, 發現收件夾內接收的郵件均為亂碼, 而且連帶影響到郵件的html內文, 原因在於E-Mail標準格式中表頭的部分不允許使用雙位元的文字(也就是中文等...), 所以必須使用mb_encode_mimeheader()函式將雙位元文字編碼為單位元字串。

但是因為mb_encode_mimeheader()預設的字串編碼為西方ISO-8859-1, 所以如果你的編碼中文字為UTF-8就必須使用mb_internal_encoding()將內部預設編碼改為UTF-8。

<?php
mb_internal_encoding('UTF-8');    // 內部預設編碼改為UTF-8
$mail->Subject = mb_encode_mimeheader($_POST['title'], "UTF-8");
$mail->Body = $_POST['content'];
?>

6 則留言:

  1. 我都用iconv去轉
    因為有時候mb_internal_encoding 主機不支援
    iconv相對比起來多一些些

    回覆刪除
  2. 用法為 iconv_set_encoding("internal_encoding", "UTF-8");

    回覆刪除
  3. PHPMailer 可以直接指定字集 ex:
    $mail->CharSet = "utf-8";

    回覆刪除
  4. 您好
    請問郵件"內容"亂碼要如何轉換呢?
    感謝您!

    回覆刪除