我正在通过西班牙语的PHP mail()发送简报,他们有口音和特殊字符(我将尝试粘贴在这里:á,í,é,ñ...)。
对于电子邮件的HTML版本,我认为我通过打印á
,é
来解决了这个问题......
然而对于纯文本版本,我认为我不能放那些,对吗?
对于HTML和纯文本版本,最好的做法是什么? 之后,我可能不得不用更复杂的语言发送电子邮件,例如希伯来语或中文......
谢谢!
答案 0 :(得分:24)
您需要使用MIME。添加邮件标题:
MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8
(如果您已使用MIME multipart/alternative
将HTML和文本放在同一邮件中,则将Content-Type: text/plain;charset=utf-8
放在文本部分的子标题上。)
这假设你要发送“国际”字符的编码是UTF-8。如果您希望迎合多个国家/地区,UTF-8是您在整个应用程序中使用的唯一合理的编码选择,但如果您还没有真正考虑过这一点,那么您的网站可能会默认为西欧编码。检查中文字符之类的东西是否在您的站点和数据库中正常工作,然后再通过邮件担心它们。
出轨:有些地方用UTF-8发送邮件不是最有效的。我不了解中国,但在日本仍有一些倒退和荒谬的邮件系统(尤其是网络邮件)无法应对Unicode,必须给出一个特定于语言环境的编码,如Shift-JIS。如果您专注于这些市场,您通常最终必须使用iconv
来创建特殊编码的邮件版本。不愉快。
现在,由于许多邮件服务器无法处理邮件正文中的非ASCII字符,因此您必须对它们进行编码。您可以为此选择quoted-printable或base64;对于包含ASCII字符的内容,quoted-printable通常更小,更易读:
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hello! An a-acute is =C3=A1
以这种格式编码的函数是quoted_printable_encode。但是,您确实需要一个合理的最新PHP才能获得该功能;如果您没有,可以将Content-Transfer-Encoding
设置为base64
,然后使用base64_encode。
最后,如果要在标题中包含非ASCII字符(例如在From
,To
或Subject
中),则语法完全不同:
Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?=
中间的QW...==
混乱是UTF-8中“a-acuteisá”的base64_encode
。
答案 1 :(得分:1)
á,í,é,ñ等重音字符适用于大多数默认浏览器设置的纯文本。
像汉字一样的亚洲人通常会变成垃圾。
是的,建议采用纯文本+ HTML格式。
答案 2 :(得分:1)
如果您的电子邮件内容编码为UTF-8,并且您要将电子邮件发送为UTF-8,那么您不必在Html或文本部分中使用任何特殊的国际字符处理。