php - 在 phpmailer 主题中使用 Acute 时出现问题

标签 php html phpmailer

代码:

$mail = new PHPMailer();
$mail->isSendmail();
$mail->setFrom('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90f9fef6ffd0e2f5fef5beffe2f7" rel="noreferrer noopener nofollow">[email protected]</a>', 'Rene');
$mail->addAddress($_POST['email'],$_POST['name']);
$mail->Subject = 'Confirmación';

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

$mail = new PHPMailer();
$mail->isSendmail();
$mail->setFrom('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4821262e27083a2d262d66273a2f" rel="noreferrer noopener nofollow">[email protected]</a>', 'Rene');
$mail->addAddress($_POST['email'],$_POST['name']);
$mail->Subject = 'Confirmaci&oacute;n';

它看起来像:Confirmaci & o a cut e;n。 我该如何解决这些问题。它需要出现在电子邮件收件箱中,例如:Confirmación

最佳答案

您似乎遇到了第一个字符编码错误。恭喜!你已经迈出了第一步,进入了一个充满严重遗产和巨大错误的世界,这些错误将永远被保留。让我们开始吧。

Ive used the own "ó" and the subject will appear as: Confirmación in my email account.

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

当您在 PHP 源代码中输入 'ó' 时,您实际上并没有告诉 PHP 您认为自己是什么。你想说的是,“给我一个包含代码点 U+00F3 带有尖音的拉丁文小写字母 O 的字符串”。不过,PHP 不支持 Unicode;它的字符串实际上是字节向量。 PHP 听到的是“给我字节向量”,所以它就这么做了。当消息到达您的屏幕时,某些已经决定这些字节必须是根据 Microsoft Codepage 1252 编码的字符:

$ echo 'ó' | iconv -f cp1252
ó

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

The Subject of the message.

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


好吧,我在 PHPMailer 错误跟踪器上进行了一些研究,我发现了 this conversation 。那里有很多东西不适用于这种情况,但我确实设法了解到 PHPMailer::$CharSet 属性也适用于 header 。 (文档:“消息的字符集。”)因此,针对您的情况的正确解决方法是添加行

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

到第一个脚本的底部。

关于php - 在 phpmailer 主题中使用 Acute 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303152/

相关文章:

PHP 联系表格邮件功能不起作用

php - MVC PHP - 从模型发送邮件

php - 多对一关系,其中子实体用于 AJAX 文件上传

JQuery 检测由 JS 进行更改的更改输入

javascript - QuerySelectorAll 识别所有但不为所有添加效果

phpmailer - 使用phpmailer发送异步电子邮件

PHP MySQL 转储命令

php - 无法选择动态生成的表单元素(ajax)

javascript - 将文本向右环绕,在一个圆圈内

PHPmailer setfrom 错误