Задать вопрос
@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

:

Везде где русский текст, ничего не приходит
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 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
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы