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 关注
- 197 浏览
添加回答
举报
