@rekurt
Я никита

Из-за чего проблема с кодировкой в форме отправки почты на php?

Добрый день!
Есть такая форма на пехапе
Через нее приходят кракозяблики, что очень удручает.
Как это поправить?
<?php 
function mail_utf8($to, $subject = '(No subject)', $message = '', $from) {
  $header = 'MIME-Version: 1.0' . "\n" . 'Content-type: text/plain; charset=UTF-8'
    . "\n" . 'From: Yourname <' . $from . ">\n";
  mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}

$nameError = '';
$emailError = '';
$commentError = '';
if(isset($_POST['submitted'])) {
		if(trim($_POST['contactName']) === '') {
			$nameError = 'Введите ваше имя.';
			$hasError = true;
		} else {
			$name = trim($_POST['contactName']);
		}
		
		if(trim($_POST['email']) === '')  {
			$emailError = 'Ввежите ваш Email.';
			$hasError = true;
		} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
			$emailError = 'Неверный адрес почты.';
			$hasError = true;
		} else {
			$email = trim($_POST['email']);
		}
			
		if(trim($_POST['comments']) === '') {
			$commentError = 'Введите текст сообщения.';
			$hasError = true;
		} else {
			if(function_exists('stripslashes')) {
				$comments = stripslashes(trim($_POST['comments']));
			} else {
				$comments = trim($_POST['comments']);
			}
		}
			
		if(!isset($hasError)) {
			$emailTo = get_option('tz_email');
			if (!isset($emailTo) || ($emailTo == '') ){
				$emailTo = get_option('admin_email');
			}
			$subject = '[Контактная форма] prosto2.ru'.$name;
			$body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
			$headers = 'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $emailTo;
			
			mail($emailTo, $subject, $body, $headers);
			$emailSent = true;
		}
	
} ?>


Проблема решена!
решение проблемы:
изменение строчки
$headers = 'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $emailTo;

на
$headers = "Content-Type: text/plain; charset=utf-8\r\n".'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $emailTo;
  • Вопрос задан
  • 6720 просмотров
Решения вопроса 2
Zerstoren
@Zerstoren
Есть какие-то ситуации, когда почтовик и на заголовки пльюет и на всё остальное. Единое что помогает, это:

mail($mailto, 
 "=?utf-8?B?".base64_encode($subject1)."?=", 
 $body, // у body то-же самое что и с темой письма
 $headers);
Ответ написан
papahoolio
@papahoolio
Нужно заменить строчку
mail($emailTo, $subject, $body, $headers);
на
mail_utf8($emailTo, $subject, $body, $emailTo)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Hakkunamatata
@Hakkunamatata
Зефирный-человек
Проверьте кодировку самого файла, где задаётся текст письма.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Spice IT Recruitment Москва
До 230 000 ₽
ImageSpark Санкт-Петербург
от 60 000 ₽
FrozenEon Киев
от 1 500 до 3 000 $
07 июн. 2020, в 01:42
300000 руб./за проект
07 июн. 2020, в 00:15
500 руб./за проект