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++ 检查)。

下面是一个例子:

我使用表单发送了消息

This is non Cyrillic text, now follows some Cyrillic text. Поздрави другар!

我收到了

This is non Cyrillic text, now follows some Cyrillic text. Поздрави другар!!

非常感谢你能给我解决这个问题的任何帮助,非常感谢你花时间阅读这篇文章。

PS:已修复!!检查上面的代码,看看它最终是如何工作的。

您的整个代码具有相同的字符集很重要,以避免出现字符显示不正确的问题。

有一些设置需要正确定义,我强烈建议使用 UTF-8(正如您已经在 HTML 中设置的那样),因为它包含您需要的大多数字母(斯堪的纳维亚语, 希腊语, 阿拉伯语).

下面我列出了一些必须设置为特定字符集的内容。

Headers

  • 将 HTML 和 PHP headers 中的字符集设置为 UTF-8

    • PHP: header('Content-Type: text/html; charset=utf-8');
      (PHP headers 必须放在 any 输出之前(回声,空格, HTML)!)

    • HTML: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      (HTML-headers 放在 <head> / </head> 标签内)

File-encoding

  • 同样重要的是 .php-file 本身是 UTF-8 编码的。如果您使用 Notepad++ 编写代码,可以在任务栏上的 "Format" drop-down 中完成。

你可以看看这个 Whosebug post:UTF-8 all the way through

您的电子邮件中需要两个 headers。

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

ТоздѢави РхѢугаѢ!! ← 作为 Windows-1251