最近,我们已将环境转换为使用UTF-8编码。一切似乎都很完美。在UTF-8中正确地提供了页面,并且使用PHP的mail()函数发送的电子邮件也被发送(在我们的例子中)法语字符正确显示。
今天早上,我开始用非多字节字符串函数(例如,strlen(),mail())替换它们的多字节对应项(例如,mb_strlen(),mb_send_mail()),它似乎正在工作在所有情况下都是预期的,除了mb_send_mail(),其中法语字符显示为问号。奇怪的是,它们在使用mail()时显示正确。在这两种情况下,我还在电子邮件的标题中将字符集设置为utf-8,并在我的电子邮件客户端中检查它确认它是这样发送的。
我应该使用功能重载功能添加不,因为我担心它会干扰我们正在使用的第三方扩展,这就是我选择手动替换功能的原因
修改
这些行在php.ini中修改/添加:
default_charset = "utf-8"
mbstring.language=Neutral
mbstring.internal_encoding=utf-8
mbstring.http_input=UTF-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
我的PHP文件也都以UTF-8编码保存,没有BOM。
调用mb_send_mail()函数时的代码如下所示:
$to = "person@email.com";
$subject = "Assigné";
$body = "La demande suivante vous a été assigné : "
$headers .= 'From: ' . $from . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-Type: text/html; charset="utf-8"' . "\r\n";
$headers .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n";
if (!(@mb_send_mail($to, $subject, $body, $headers))) {
//Error message
}
正如我原来的帖子所示,当使用mb_send_mail()函数时,我所有的急性(é)字符,包括电子邮件的主题和bosy,都显示为问号(?),但在使用mail()函数时,它们看起来像预期的那样。
答案 0 :(得分:0)
根据我的注意,保持mail()
功能更好。
请参阅其他人推荐的mb_send_mail()
的PHP手册。