使用非英文字符发送电子邮件时,为什么有些字符显示为问号?

时间:2009-11-21 10:14:16

标签: php email encoding character-encoding

我尝试使用PHP mail函数发送包含非英文字符的文本电子邮件。但相反,我的消息与搞笑的垃圾字符。我该如何解决?

我使用这段代码:

function _mail($to, $subject, $content)
{

 $headers = 'From: info@example.com' . "\r\n" .
    'Reply-To: info@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

 mail($to, $subject, $content, $headers);
}

有些角色出问题......

4 个答案:

答案 0 :(得分:5)

这绝对是Joel的文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)的案例。

在成功解决此问题之前,您必须先了解字符编码的作用。

答案 1 :(得分:3)

Swiftmailer等邮件包装可能会对您有所帮助。

答案 2 :(得分:2)

关键是使用UTF-8字符集。

Content-Type: text/html; charset=UTF-8MIME-Version 1.0Content-Transfer-Encoding: quoted-printable添加到邮件标题中,如下所示:

$headers = 'From: info@example.com' . "\r\n" .
           'Reply-To: info@example.com' . "\r\n" .
           'Content-Type: text/html; charset=UTF-8' . "\r\n" .
           'MIME-Version: 1.0' . "\r\n" .
           'Content-Transfer-Encoding: quoted-printable' . "\r\n" .
           'X-Mailer: PHP/' . phpversion(); // Why would you want to send this header?

如果您要使用HTML而不是文字,则还需要在(X)HTML邮件的META中添加HEAD标记:

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />

答案 3 :(得分:1)

您可能需要查看PEAR's MAIL_MIME