我在网上有一个调查表。填写此表单后,我将使用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>
平方的时间符号更像一个矩形。
有什么问题吗?还是我应该在哪里寻找错误?
答案 0 :(得分:0)
我不确定\ r \ n是否适用于所有平台
请参阅:Which line break in php mail header, \r\n or \n?
代替
("xxx\r\n\yyy");
使用
Header('xxx');
Header('yyy');
或使用PHP_EOL,而不是“ \ r \ n”
答案 1 :(得分:0)
问题解决了。我的托管服务提供商对标头使用了不同的字符编码-我无法解释原因,但是以下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));
如果其他人遇到与我相同的问题,希望对他们有帮助。