@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;
  • Вопрос задан
  • 7018 просмотров
Решения вопроса 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
Зефирный-человек
Проверьте кодировку самого файла, где задаётся текст письма.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы