@msdoc11

Почему форма обратной связи не отправляет русские буквы?

Здравствуйте, почему на почту приходит только текст на английском алфавите?

Код обработчика:
<?php

$post = (!empty($_POST)) ? true : false;

if($post)
{
$name = htmlspecialchars($_POST['name']);
$phone = htmlspecialchars($_POST["phone"]);
$gosnumber = htmlspecialchars($_POST['gos_number']);
$markaauto = htmlspecialchars($_POST['marka_auto']);
$date = htmlspecialchars($_POST['date']);
$time = htmlspecialchars($_POST['time']);
$osago = htmlspecialchars($_POST['osago']);
$error = '';


// Проверка телефона
function ValidateTel($valueTel)
{
$regexTel = "/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/";
if($valueTel == "") {
return false;
} else {
$string = preg_replace($regexTel, "", $valueTel);
}
return empty($string) ? true : false;
}
if(!$name)
{
$error .= "Введите имя<br />";
}
}
if(!$phone)
{
$error .= "Введите ваш телефон<br />";
}
if(!$gosnumber)
{
$error .= "Введите Гос. номер<br />";
}
if(!$markaauto)
{
$error .= "Введите марку авто<br />";
}
if(!$date)
{
$error .= "Выберите дату<br />";
}
if(!$time)
{
$error .= "Выберите время<br />";
}
if(!$osago)
{
$error .= "Выберите ОСАГО<br />";
}

if(!$error)

{


$name_tema = "=?utf-8?b?". base64_encode($name) ."?=";

$subject ="Новая заявка с сайта domain.name";
$subject1 = "=?utf-8?b?". base64_encode($subject) ."?=";
/*
$message ="\n\nСообщение: ".$message."\n\nИмя: " .$name."\n\nТелефон: ".$tel."\n\n";
*/
$message1 = "\n\nИмя: ".$name."\n\nТелефон: ".$phone."\n\nE-mail: ".$gosnumber."\n\nСообщение: ".$markaauto."\n\nСообщение: ".$date."\n\nСообщение: ".$time."\n\n";	


$header = "Content-Type: text/plain; charset=utf-8\n";

$header .= "From: Новая заявка <mail@evau.ru>\n\n";	
$mail = mail("g_nik_s@mail.ru", $subject1, iconv ('utf-8', 'windows-1251', $message1), iconv ('utf-8', 'windows-1251', $header));

if($mail)
{
echo 'OK';
}

}
else
{
echo '<div class="notification_error">'.$error.'</div>';
}

?>


На почту приходит это:

:

: +7 (999) 999-99-99

E-mail: test@mail.ru

: asf

: fasfasfas

:

Везде где русский текст, ничего не приходит
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
@galaxy
А вот это вы зачем делаете:
iconv ('utf-8', 'windows-1251', $message1)

?

Заголовки (например,
$header .= "From: Новая заявка <mail@evau.ru>\n\n";
) тоже необходимо кодировать
Ответ написан
Комментировать
Spartak-2205
@Spartak-2205
Разработка и создание сайтов
Явная проблема с кодировкой.
Если у вас сайт в кодировке windows-1251, то обратите внимание на параметр encoding в htmlspecialchars

iconv ('utf-8', 'windows-1251', $message1), iconv ('utf-8', 'windows-1251', $header)

Если всё-же сайт в кодировке windows-1251, а письмо хотите отправить в кодировке utf-8, то необходимо наоборот перекодировать в utf-8:
iconv('windows-1251', 'utf-8', $message1), iconv('windows-1251', 'utf-8', $header)

И в htmlspecialchars указать кодировку:
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, "windows-1251");
...


Если же всё-таки сайт в utf-8 и письмо надо отправить в utf-8, то вот в этом нет необходимости
iconv ('utf-8', 'windows-1251', $message1), iconv ('utf-8', 'windows-1251', $header)


P/S: судя по коду, скорее всего у вас сайт в кодировке windows-1251, поэтому необходимо для htmlspecialchars указать параметр encoding. Именно в этом случае кириллица вырезается функцией htmlspecialchars
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект