我的网站上有一个联系表格,它依靠PHP来完成它的工作。问题是,当你发送一个用西里尔字母写的信息时,我只会得到一堆问号。
以下是该表格的代码:
<?php header('Content-Type: text/html; charset=utf-8');
header('Content-Transfer-Encoding: 8bit');
if(isset($_POST['email'])){
$mailTo = "ameli_cakes@abv.bg";
$subject = "mail from web";
$body = "New message from web
<br><br>
FROM: ".$_POST['email']."<br>
NAME: ".$_POST['name']."<br>
SUBJECT: ".$_POST['subject']."<br>
COMMENTS: ".$_POST['message']."<br>";
$headers = "To: Ameli Cakes <".$mailTo.">\r\n";
$headers .= "From: ".$_POST['author']." <".$_POST['email'].">\r\n";
$headers .= 'Content-Type: text/HTML; charset=utf-8' . "\r\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\r\n";
//envio destinatario
$mail_success = mail($mailTo, $subject, $body, $headers);
}
?>
请记住,我对PHP的了解非常有限,而且我不是这段代码的作者。
我认为页面的HTML具有相应的元标记,您可以在下面查看:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
PHP文件本身也编码为utf-8(用notepad ++检查)。
以下是发生的事情的一个例子:
我使用表单发送了消息
这是非西里尔文本,现在遵循一些西里尔文本。 Поздрави другар!
我收到了
这是非西里尔文本,现在遵循一些西里尔文本。 Поздравидругар!!
我真的很感谢你能给我解决这个问题的任何帮助,非常感谢你抽出时间阅读本文。
PS:它已经固定了!!检查上面的代码,看看它最终是如何工作的。答案 0 :(得分:1)
您的整个代码具有相同的字符集以避免字符显示不正确的问题非常重要。
有一些设置需要正确定义,我强烈推荐UTF-8(正如您在HTML中设置的那样),因为这里有大多数你需要的字母(斯堪的纳维亚语,希腊语,阿拉伯语) )。
下面我列出了一些必须设置为特定字符集的内容。
<强>接头强>
将HTML和PHP标头中的字符集设置为UTF-8
PHP:header('Content-Type: text/html; charset=utf-8');
(PHP标头必须放在任何输出之前(echo,空格,
HTML)!)
HTML:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
(HTML标题位于<head>
/ </head>
标记内)
文件编码的 强>
您可以查看此StackOverflow帖子:UTF-8 all the way through。
答案 1 :(得分:1)
您的电子邮件需要两个标题。
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
在你的代码中会是这样的:
$headers .= "Content-Type: text/html; charset=utf-8";
$headers .= "Content-Transfer-Encoding: 8bit";
P.S。
流
D0 9F D0 BE D0 B7 D0 B4 D1 80 D0 B0 D0 B2 D0 B8 20 D0 B4 D1 80 D1 83 D0 B3 D0 B0 D1 80 21 21
Поздравидругар!! ←作为UTF-8
Поздравидругар!! ←as Windows-1251