PHP转换html特殊字符像口音正确显示

时间:2014-05-17 21:17:22

标签: php html-entities

我有一个简单的网页,我从$ _POST获取用户输入的一些数据:评论,用户名等。然后我将它们发送到电子邮件并将其保存在数据库中。我的问题是,当我发送电子邮件时,无论客户端是什么,我只看到胡言乱语。我尝试在所有iso 88xx,utf8,windows等电子邮件中声明元标记,但没有成功。还尝试了一百万个htmlentities()的例子,都导致了同样的事情......简单的胡言乱语。 (虽然源代码有时会显示不同的内容,但纯文本永远不会改变)。

示例代码:

if (isset($_POST['name'])) {
   $name = htmlentities($_POST['name'], ENT_QUOTES);
}

$ name(DonQuijóte)的邮件()的结果将是这样的“DonQuijóte”。

很抱歉,如果这是转贴,但我无法正常工作。

2 个答案:

答案 0 :(得分:1)

您是否尝试过设置标题,例如......

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:plain/text;charset=UTF-8" . "\r\n";

mail($to,$subject,$message,$headers);

这会将编码设置为UTF-8。更多信息: http://www.w3schools.com/php/func_mail_mail.asp

答案 1 :(得分:1)

以正确的方式发送邮件实在令人惊讶。您在Don Quijote中遇到的错误是由于您的字符串在utf8中,但它显示的是ISO8859编码。 (这就是为什么你得到那个奇怪的A和一个小3。

我建议使用php邮件You can get it here

设置起来更简单,如果您在将来的某个时间需要发送大量电子邮件,效率会更高。 (因为mail()会在每次调用时打开和关闭连接)

另请注意,如果您使用utf-8,则应使用utf-8。您的数据库应设置为utf-8。你输出到HTML等等。你应该确保它的每一步都是utf8。