You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改PHP邮件发送代码解决UTF-8字符编码问题?

邮件UTF-8特殊字符乱码问题排查与解决

乱码问题大概率出在PHP的邮件头设置环节,和HTML表单的UTF-8编码无关,核心原因是邮件发送时未正确声明字符编码规则,导致邮件客户端无法识别UTF-8格式的特殊字符(öüóőúéá等)。

具体原因

  • 未指定邮件Content-Type编码:PHP默认的mail()函数发送邮件时,会使用系统默认字符集(通常是ISO-8859-1),和表单提交的UTF-8编码不匹配,直接导致特殊字符解析错误。
  • 缺少传输编码声明:UTF-8字符需要对应的传输编码(如quoted-printable或base64)来保证传输过程中不被破坏,缺失该声明会让客户端无法正确解码。
  • 服务器默认字符集干扰(少见):如果服务器的PHP全局字符集不是UTF-8,可能在接收表单数据时自动转码,但这种情况只要表单明确设置accept-charset="UTF-8"就可以避免。

解决方法

修改PHP邮件发送代码,补充正确的邮件头信息,明确指定UTF-8编码:

// 接收表单提交的内容
$user_content = $_POST['form_content'];
$target_email = '指定邮箱@yourserver.com';

// 邮件主题需转码,避免主题中的特殊字符乱码
$subject = '=?UTF-8?B?' . base64_encode('用户表单提交内容') . '?=';

// 构建完整的邮件头
$headers = "MIME-Version: 1.0\r\n";
// 纯文本邮件用text/plain,HTML邮件替换为text/html
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\r\n";
$headers .= "From: 网站表单 <noreply@yourdomain.com>\r\n";

// 发送邮件
mail($target_email, $subject, $user_content, $headers);

关键说明

  • 邮件主题必须用=?UTF-8?B?...?=格式进行base64编码,否则主题中的特殊字符同样会乱码。
  • 如果发送的是HTML格式邮件,将Content-Type改为text/html; charset=UTF-8即可。
  • 确保表单标签添加accept-charset="UTF-8",进一步保证提交数据的编码一致性。

内容的提问来源于stack exchange,提问作者Bálint Forgács

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:52:37