将UTF-8与PHPMailer结合使用的问题

时间:2019-01-28 18:31:03

标签: utf-8 phpmailer

我正在使用PHPMailer 5从表单发送纯文本电子邮件。似乎有些用户将单词中的内容粘贴到textarea字段中,并且生成的电子邮件带有很多不可读的字符(例如“)。

我尝试添加$ mail-> CharSet ='UTF-8';并且似乎可以修复我已经完成的测试(例如,现在可以正确完成项目符号列表)。

$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
$mail->ContentType = 'text/plain'; 
$mail->IsHTML(false);

将字符集设置为UTF-8是否会出现任何安全问题或其他问题?

1 个答案:

答案 0 :(得分:0)

您做对了。 PHPMailer默认使用ISO-8859-1字符集(PHP的内部mail函数也是如此),因为它可以在没有mbstring PHP扩展名(默认情况下不可用)的情况下使用。没有该扩展名,UTF-8支持将无法使用。切换为使用UTF-8后,整个工具链也必须使用UTF-8-编辑器,数据库和数据库连接。您还需要警惕strlensubstr之类的函数,它们不支持UTF-8安全,因为它们以字节为单位,而不是char(长度可能超过1个字节),因此不起作用。只要其中一件事情弄错了,您就会看到自己的腐败现象。坚持使用一些难以测试的字符串(尽管请参见my answer about that)来确保它毫发无损是一个很好的练习。

不幸的是,MS Word是如何严重执行UTF-8的最佳示例之一。它经常使文本中充满不必要的不​​寻常字符,额外的控制字符等,因此我建议对输入内容进行一些繁重的过滤-像CKEditor这样的编辑器具有内置的过滤器来帮助处理Word的问题。这与PHPMailer无关,这只是处理Word触及的输入时的常见问题。

您唯一做错的是使用PHPMailer 5.x;当前版本是6.x。