在phpmailer主题中使用Acute的问题

时间:2014-04-25 21:12:38

标签: php html phpmailer

代码:

$mail = new PHPMailer();
$mail->isSendmail();
$mail->setFrom('info@rene.org', 'Rene');
$mail->addAddress($_POST['email'],$_POST['name']);
$mail->Subject = 'Confirmación';

我使用了自己的“ó”,主题将显示为:Confirmación 在我的电子邮件帐户中我也试过了:

$mail = new PHPMailer();
$mail->isSendmail();
$mail->setFrom('info@rene.org', 'Rene');
$mail->addAddress($_POST['email'],$_POST['name']);
$mail->Subject = 'Confirmación';

看起来像:Confirmaci& o a c u t e; n。 我怎么能解决这个家伙。它需要出现在以下电子邮件收件箱中:Confirmación

2 个答案:

答案 0 :(得分:2)

您似乎遇到了第一个字符编码错误。恭喜!你已经迈出了第一步,进入一个残缺的遗产和巨大错误的世界,这些错误应该一直保存下来。让我们一起潜入。

  

我使用了自己的“ó”,主题将显示为:我的电子邮件帐户中的Confirmaci³n。

在我开始解释为什么会发生这种情况之前,我想说清楚一点:你有所有理由相信这会起作用。在一个完美的世界里,它会有。你的工具失败了。

当您在PHP源代码中键入'ó'时,您实际上并没有告诉PHP您认为自己是什么。你想说的是,“给我一个包含代码点U + 00F3 LATIN SMALL LETTER O WITH ACUTE的字符串”。不过,PHP不会说Unicode;它的字符串实际上是字节向量。 PHP听到的是“给我字节向量< C3 B3>”,所以它确实如此。当消息到达您的屏幕时, 确定这些字节必须是根据Microsoft Codepage 1252编码的字符:

$ echo 'ó' | iconv -f cp1252
ó

这可能是PHPMailer的行为,但PHPMailer::$Subject的文档只说

  

信息的主题。

所以这不是一个很大的帮助。


好的,我在PHPMailer bug跟踪器上挖了一下,然后找到了this conversation。那里有很多东西不适用于这种情况,但是我 设法了解PHPMailer::$CharSet属性也适用于标题。 (文档:“消息的字符集。”)所以看来你的情况的正确修复是添加行

$mail->CharSet = 'UTF-8';

到第一个脚本的底部。

答案 1 :(得分:1)

看一下这篇文章并尝试那里的选项,设置编码应解决它。

php mail special characters utf8