我在我的网站上有一个联系表单,它依赖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:修复了!!检查上面的代码,看看它最终是如何工作的。
您的整个代码必须具有相同的字符集,以避免字符显示不正确的问题。
有一些设置需要正确定义,我强烈建议使用UTF-8(正如您已经在HTML中设置的那样),因为这包含了您需要的大多数字母(斯堪的纳维亚语、希腊语、阿拉伯语)。
下面我做了一个小列表,必须设置为特定的字符集。
<<p> 头/strong>设置HTML和PHP头中的字符集为UTF-8
PHP:
header('Content-Type: text/html; charset=utf-8');
PHP头文件必须放在任何输出(echo, whitespace,HTML) !)HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
(html头放置在<head>
/</head>
标签内)
File-encoding
- .php文件本身是UTF-8编码也很重要。如果你正在使用notepad++编写代码,可以在任务栏上的"格式"下拉菜单中完成。
你可以看看StackOverflow的帖子:UTF-8。
你的电子邮件需要两个标题
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
在你的代码中应该是这样的:
$headers .= "Content-Type: text/html; charset=utf-8";
$headers .= "Content-Transfer-Encoding: 8bit";
注:
流
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
Поздравидругар! !←作为Windows-1251