最近,我们将环境转换为使用 UTF-8 编码。一切似乎都运行良好。页面以 UTF-8 正确提供,使用 PHP 的 mail() 函数发送的电子邮件也以(在我们的例子中)正确显示的法语字符发送。
今天早上,我开始用它们的多字节对应函数(例如 mb_strlen()、mb_send_mail())替换非多字节字符串函数(例如 strlen()、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() 函数时,它们会出现如预期。