PHP mail()函数邮件内容重音字符显示异常问题求助
解决邮件重音字符显示为HTML编码的问题
看起来你遇到的核心问题是邮件里的特殊字符被转成了HTML实体(比如茅变成é),结合你的代码和描述,我帮你梳理几个关键的修复点:
1. 先修复邮件头的换行符错误
你代码里的邮件头用了单引号包裹\r\n,但PHP里单引号不会解析转义字符,这会导致邮件头格式混乱,邮件客户端可能无法正确识别编码设置。把单引号改成双引号,或者用PHP_EOL更稳妥:
// 原来的错误写法 // $headers_APPLICATION_RECEIVER = 'From: "people" <x@y.com> \r\n'; // 修正后 $headers_APPLICATION_RECEIVER = "From: \"people\" <x@y.com>\r\n"; $headers_APPLICATION_RECEIVER .= "Reply-to: x@y.com\r\n";
2. 还原被HTML编码的$message内容
你收到的是&eacute;这类实体,说明$message变量本身已经被HTML实体编码过(可能是之前的代码里用了htmlspecialchars()或类似函数)。需要先把它转回来:
// 把HTML实体还原成原始UTF-8字符 $message = html_entity_decode($message, ENT_QUOTES, 'UTF-8');
3. 确保$message是UTF-8编码
虽然你在邮件头里指定了UTF-8,但如果$message本身不是UTF-8编码,也会导致乱码。如果你的原始内容是其他编码(比如GBK、GB2312),要先转成UTF-8:
// 假设原始编码是GBK,根据实际情况调整 $message = mb_convert_encoding($message, 'UTF-8', 'GBK');
4. 测试简化版邮件排除干扰
先暂时去掉multipart/mixed的复杂结构,用纯文本邮件测试,确认问题是否解决:
$to_APPLICATION_RECEIVER = "w@z.ca"; $from_APPLICATION_RECEIVER = "x@y.com"; $subject_APPLICATION_RECEIVER = "Subject"; $headers_APPLICATION_RECEIVER = "From: \"people\" <{$from_APPLICATION_RECEIVER}>\r\n"; $headers_APPLICATION_RECEIVER .= "Reply-to: {$from_APPLICATION_RECEIVER}\r\n"; $headers_APPLICATION_RECEIVER .= "MIME-Version: 1.0\r\n"; $headers_APPLICATION_RECEIVER .= "Content-Type: text/plain; charset=UTF-8\r\n"; $headers_APPLICATION_RECEIVER .= "Content-Transfer-Encoding: 8bit\r\n"; // 先处理message $message = html_entity_decode($message, ENT_QUOTES, 'UTF-8'); // 如果需要转编码就加这行:$message = mb_convert_encoding($message, 'UTF-8', 'GBK'); mail($to_APPLICATION_RECEIVER, $subject_APPLICATION_RECEIVER, $message, $headers_APPLICATION_RECEIVER);
按这个顺序排查,应该能解决字符显示成HTML实体的问题。
内容的提问来源于stack exchange,提问作者Mister Milk
相关产品推荐
相关产品推荐

