PHP发送HTML邮件在Outlook中UTF-8编码失效乱码如何解决?
问题原因
你遇到的是典型的UTF-8编码被错误以ISO-8859-1编码解析的问题:’的UTF-8编码为0xE2 0x80 0x99,如果解析端强行按单字节编码读取就会显示为’。Outlook默认优先读取邮件传输头的编码配置,而忽略HTML内嵌的meta charset声明,这是问题出现的核心原因。
可行解决方案
- 优先设置邮件传输层编码
无论你使用PHPMailer、SwiftMailer还是PHP原生mail函数,必须显式声明邮件全局编码为UTF-8,不要只依赖HTML内的meta标签:- 若使用PHPMailer,添加配置
$mail->CharSet = 'UTF-8'; - 若使用原生mail函数,在邮件头中添加
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
- 若使用PHPMailer,添加配置
- 特殊字符转义为HTML实体
把模板中的特殊符号替换为对应的HTML实体,完全规避编码解析风险:
原内容Solicitor’s Certificates - Tips & Traps替换为Solicitor’s Certificates - Tips & Traps即可,’是右单引号的通用HTML实体,所有邮件客户端均可正常识别。 - 检查PHP源文件编码
确保你编写代码的编辑器将PHP文件保存为 无BOM的UTF-8 格式,避免源文件本身编码错误导致字符串拼接后编码异常。 - 优化HTML模板结构适配Outlook
把meta编码声明放到<head>标签的最开头位置,还可以额外添加适配声明<meta http-equiv="X-UA-Compatible" content="IE=edge">,适配Outlook使用的Word渲染引擎的解析规则。
内容的提问来源于stack exchange,提问作者ashanrupasinghe
相关产品推荐
相关产品推荐

