PHP表单在发送电子邮件消息时显示西里尔字母作为问号


PHP form displays cyrillic as question marks when email message is sent

我在我的网站上有一个联系表单,它依赖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