php - 在线表单中的电子邮件标题显示不正确
问题描述
我在网上有一份问卷调查表。填写完此表后,我使用 PHP 函数将其通过电子邮件发送给我mail()
。表单正文及其包含的数据(包括私人消息)在gmail.com上正确显示。但是,问题出现在电子邮件本身的标题中。某些字符显示不正确。这是一个示例标题:
$headers = "Content-Type:text/html; charset=utf-8\r\n";
$headers .= "From:" .$email . "\r\n";
$headers .= "Reply:" . $email . "\r\n";
$headers .= "X-Mailer: PHP/". phpversion() . "\r\n" ;
要求显示的电子邮件主题:
Nový dotaz -- námět, od Fořt Petr <p.fort1990@gmail.com>
主题同时显示:
Nový dotaz -- námÄ☒t od: FoÅ☒t Petr <p.fort1990@gmail.com>
平方倍符号更像一个矩形。
有什么问题吗?或者我应该在哪里寻找错误?
解决方案
问题解决了。我的托管服务提供商对标头使用不同的字符编码 - 我无法解释原因,但以下 php 函数将完成所有工作。
function recode_to_utf8 ($text, $encoding = "utf-8")
{
return "=?$encoding?Q?" . imap_8bit($text) . "?=";
}
现在您所要做的就是使用 mail() 方法和上面定义的方法一起发送一封电子邮件 recode_to_utf8()
。像这样:
mail(recode_to_utf8($mail_to), recode_to_utf8($subject), recode_to_utf8($message), recode_to_utf8($headers));
如果他们有和我一样的问题,我希望它可以帮助其他人。
推荐阅读
- python - python:keras包:(ValueError:没有这样的层:fc1)
- laravel - 如何从 Laravel Eloquent 中的两个表中检索数据
- javascript - 分配的输入值未定义,因为永远不会触发 onChange
- vb.net - 检测操作系统语言
- javascript - 更改 D3.js 中每个堆叠条的颜色
- excel - EXCEL - 将庞大的数据集从几分钟转换为几天
- javascript - 接收 66:285 未捕获的类型错误:无法读取未定义的属性 'then'
- expo - 升级后的 expo-cli 版本错误
- javascript - foreach 数组一键
- python - 迭代求和