当我使用PHP邮件发送包含£的电子邮件时,它在outlook / hotmail中显示为£。在Gmail / thunderbird中没问题。
知道如何解决这个问题吗?
答案 0 :(得分:3)
问题是,客户端不知道使用什么编码来对主题进行编码。您在Content-Type
标题中设置的应用程序的任何内容仅适用于电子邮件的正文,而不适用于标题。
通常会影响以下标题:
为了使用不同的编码,您的国际化标题行应使用MIME编码(从RFC 2047开始),使用以下两种方法之一:base64(B)或修改的quoted-printable(Q)。编码主题通常如下所示:
Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
这可能看起来很难,但PHP中有一个非常方便的辅助函数可以完成所有的魔术:
或者你可以在下面讨论讨论:
在直接使用quoted_printable_encode()
之前,您需要考虑到需要将长行拆分为一定长度,并且空格需要用下划线“_”替换。
答案 1 :(得分:1)
通常我使用mb_convert_encoding()
函数
mb_convert_encoding($string, "UTF-8"); //AUTO DETECT AND CONVERT
mb_convert_encoding($string, "UTF-8", "latin1"); //MANUAL SET - CHANGE latin1 TO CURRENT ENCODING
答案 2 :(得分:0)
就在今天,我使用phpmailer而不是php的内置mail
修复了类似的主题编码问题:
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet = "utf8";
$mail->Subject = $mail->EncodeHeader("You won £10000000!");
....
$retval = $mail->Send();
答案 3 :(得分:0)
尝试在电子邮件中使用UTF-8编码。
答案 4 :(得分:0)
这对我的
有结果<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>