Форма PHP отображает кириллицу в виде вопросительных знаков при отправке электронного письма

У меня есть контактная форма на моем веб-сайте, которая использует 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: это исправлено! проверьте код выше, чтобы увидеть, как это наконец работает.

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";

Постскриптум
Поток

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

1

Другие решения

Важно, чтобы ваш все Код имеет ту же кодировку, чтобы избежать проблем, когда символы отображаются неправильно.

Есть несколько настроек, которые необходимо правильно определить, и я настоятельно рекомендую UTF-8 (как вы уже установили в своем HTML), так как в нем содержится большинство букв, которые вам понадобятся (скандинавские, греческие, арабские).

Ниже я сделал небольшой список вещей, которые должны быть установлены для определенной кодировки.

Заголовки

  • Установка кодировки в заголовках HTML и PHP в UTF-8

    • PHP: header('Content-Type: text/html; charset=utf-8');
      (Заголовки PHP должны быть размещены до любой вывод (эхо, пробел,
      HTML)!)

    • HTML: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      (HTML-заголовки размещаются внутри <head> / </head> тег)

Файл-кодирование

  • Также важно, чтобы сам .php-файл был в кодировке UTF-8. Если вы используете Notepad ++ для написания своего кода, это можно сделать в раскрывающемся меню «Формат» на панели задач.

Вы можете взглянуть на этот пост StackOverflow: UTF-8 полностью.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector