Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP表单在发送电子邮件时将西里尔文显示为问号_Php_Forms_Email_Cyrillic - Fatal编程技术网

PHP表单在发送电子邮件时将西里尔文显示为问号

PHP表单在发送电子邮件时将西里尔文显示为问号,php,forms,email,cyrillic,Php,Forms,Email,Cyrillic,我在我的网站上有一个联系表单,它依赖于PHP来完成它的工作。问题是,当你发送一封用西里尔字母书写的邮件时,我只得到一堆问号 下面是该表格的代码: <?php header('Content-Type: text/html; charset=utf-8'); header('Content-Transfer-Encoding: 8bit'); if(isset($_POST['email'])){ $mailTo = "ameli_cakes@abv.bg";

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

下面是发生的情况的示例:

我用邮件的形式发送了邮件

这是非西里尔文字,现在跟随一些西里尔文字。Поздрави другар!

我收到

这是非西里尔文字,现在跟随一些西里尔文字。Поздрави другар!!

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

附言:已经修好了!!检查上面的代码,看看它最终是如何工作的。

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

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

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

标题

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

    • PHP:
      header('Content-Type:text/html;charset=utf-8')
      (PHP标题必须放在任何输出(回显、空白、, HTML)!)

    • HTML:

      (HTML标题放在
      /
      标记中)

文件编码

  • .php文件本身是UTF-8编码的,这一点也很重要。如果您使用记事本++编写代码,可以在任务栏上的“格式”下拉列表中完成

您可以查看此StackOverflow帖子:

您的电子邮件中需要两个标题

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

嗨,谢谢你的回答,我用你的建议更新了帖子。PHP代码已经用头更新,但问题仍然存在,HTML中的元标记位于头标记内,PHP文件编码为utf-8。使用记事本++检查。还应删除
utf8\u decode()
。声明它从UTF-8转换为单字节ISO-8859-1。此外,您的文件是否使用
UTF-8编码,不带BOM
UTF-8
?它应该是第一个(没有BOM)。Notepad++说它是UTF-8,没有BOM,我按照建议更新了代码,但仍然不起作用,但有一个变化。问号消失了,取而代之的是这个“ПџѕѕП·ПґСЂПёСґСЂСЂСѓѕѕѕзза”,它仍然不是它应该的样子(检查原始示例),谢谢!如果你
echo$_POST['email'](发送前),是否正确编码?因为它应该是,如果你的头设置和文件是正确编码。我不知道你要我做什么。。。我的PHP知识真的很差,对不起。我应该在代码的某个地方加上吗?当我这样做时,我得到了语法错误。@qirel的可能重复我添加了第二个标题,如下所示:
header('Content-Type:text/html;charset=utf-8');标题('Content-Transfer-Encoding:8bit')但问题仍然存在,感谢您的帮助!我是通过电子邮件收到的。在遵循@Qirel的建议后,我再也没有得到问号了,现在当我应该得到“Пзззззззззззаааазаазазазаааз。删除utf8_decode()函数后。我将更新帖子以反映这一点。这些是电子邮件标题。如果您使用
邮件
功能,则
标题
不会在电子邮件中设置任何内容。已修复,谢谢您的帮助!检查原始帖子中的代码,看看它现在是如何工作的@Qirel也非常感谢你的帮助!