2 回答

TA贡献1982条经验 获得超2个赞
卓悦斯特凡。此页面描述了您所看到的症状;一个字符变成两个意味着您的数据是 UTF-8 格式,但正在使用 8 位字符集显示。一般来说,PHPMailer 是正确的,所以你需要弄清楚你哪里出错了。
如果您使用,SMTPDebug = 2
您将能够看到正在发送的消息(使用像é😎
这样的非常短的消息正文,保证只能在 UTF-8 中工作)。
确保脚本文件本身的编码也是 UTF-8 - 将表情符号放入其中是确保它是的好方法。
诊断的问题在于您会发现您的操作系统受到干扰 - 诸如复制到剪贴板之类的事情可能会改变编码 - 因此处理它的方法是使用十六进制转储功能,让您检查实际字节值。法语是最容易查看的字符之一,因为几乎所有字符都是常规的单字节 ASCII 兼容字符,并且重音字符更容易被发现。在 PHP 中,该bin2hex()
函数将执行此操作。
您有 2 个错别字:Debutoutput
应该Debugoutput
并且fonction
应该是function
- 这是从以下位置转储十六进制数据的好地方:
$mail->Debugoutput = function($str, $level) {echo $str, "\n", bin2hex($str), "\n";};
下面是一个例子:
echo 'abc ', bin2hex('abc');
这将产生abc 616263
; 每个输入字符都会产生 2 个十六进制数字(1 个字节)的输出。如果您的输入是abé
并且您的字符集是 ISO-8859-1,它将显示为abé 6162e9
,因为该字符e9
集中的é 是(十六进制)。UTF-8 中的相同字符串将作为 出现abé 6162c3a9
,因为 UTF8 中的 é 是c3a9
-两个字节,而不仅仅是一个。像这样检查字符可以让您绝对确定数据所在的字符集 - 仅查看它是不够的!
所以,虽然我不能确切地说出你的问题在哪里,但希望你对如何诊断它有一些更好的想法。
- 2 回答
- 0 关注
- 151 浏览
添加回答
举报