我正在使用PHPMailer 5从表单发送纯文本电子邮件。似乎有些用户将单词中的内容粘贴到textarea字段中,并且生成的电子邮件带有很多不可读的字符(例如“)。
我尝试添加$ mail-> CharSet ='UTF-8';并且似乎可以修复我已经完成的测试(例如,现在可以正确完成项目符号列表)。
$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
$mail->ContentType = 'text/plain';
$mail->IsHTML(false);
将字符集设置为UTF-8是否会出现任何安全问题或其他问题?
答案 0 :(得分:0)
您做对了。 PHPMailer默认使用ISO-8859-1字符集(PHP的内部mail
函数也是如此),因为它可以在没有mbstring
PHP扩展名(默认情况下不可用)的情况下使用。没有该扩展名,UTF-8支持将无法使用。切换为使用UTF-8后,整个工具链也必须使用UTF-8-编辑器,数据库和数据库连接。您还需要警惕strlen
和substr
之类的函数,它们不支持UTF-8安全,因为它们以字节为单位,而不是char(长度可能超过1个字节),因此不起作用。只要其中一件事情弄错了,您就会看到自己的腐败现象。坚持使用一些难以测试的字符串(尽管请参见my answer about that)来确保它毫发无损是一个很好的练习。
不幸的是,MS Word是如何严重执行UTF-8的最佳示例之一。它经常使文本中充满不必要的不寻常字符,额外的控制字符等,因此我建议对输入内容进行一些繁重的过滤-像CKEditor这样的编辑器具有内置的过滤器来帮助处理Word的问题。这与PHPMailer无关,这只是处理Word触及的输入时的常见问题。
您唯一做错的是使用PHPMailer 5.x;当前版本是6.x。