PHP +UTF-8. Как решить проблему с кодировкой письма отправляемого через форму на сайте.

Здравствуйте! Сегодня хочу описать решение одной распространенной ошибки при написании скрипта обратной связи. А именно не верной кодировки получаемого письма, как здесь(еще её называют крокозябры в письме) :

C я│п╟п╧я┌п╟: test <test@mail.r4u>
п·я┌п©я─п╟п╡п╦я┌п╣п╩я▄: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣
Date: Mon, 24 Jun 2013 11:03:16 +0400
п╓.п≤.п·. п╨п╬п╫я┌п╟п╨я┌п╫п╬пЁп╬ п╩п╦я├п╟: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣
п п╬п╫я┌п╟п╨я┌п╫я▀п╧ я┌п╣п╩п╣я└п╬п╫ п╨п╩п╦п╣п╫я┌п╟:
я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣
п▓я─п╣п╪я▐ п╦ п╢п╟я┌п╟ я┐п╢п╬п╠п╫п╬п╣ п╢п╩я▐ п╥п╡п╬п╫п╨п╟ п╣п╪я┐: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣

На решение проблемы у меня ушло не мало времени, пока не перепробовал разные варианты из интернета. Надеюсь я смогу сэкономит вам время, описав решение:)

Ниже я приведен код, который отправляет данные полученные из формы:

<?php
if (isset($_POST['name'])) {
$name = strip_tags($_POST['name']);
$email = strip_tags($_POST['Email']);
$sug = strip_tags($_POST['sug']);
echo "Ваше Ф.И.О. :".$name."</br>";
echo "Ваш контактный телефон :".$email."</br>";
echo "Время и дата :".$sug."</br>";
echo "<span class=\"label label-info\" >Ваш запрос отправлен.
Спасибо вам за ваш интерес к нашей компании!</span>";
$from = 'test@mail.ru';
$emailTo = 'test@mail.ru';
$subject = '=?UTF-8?B?'.base64_encode('Запрос прайс листа с сайта: test').'?=';
$headers = 'Content-type: text/plain; charset=utf-8';
$headers .= "From: ". $from ." <". $from ."> \r\n";
$body = "Ф.И.О. контактного лица: $name \n\nКонтактный телефон клиента:
$email \n\nВремя и дата удобное для звонка ему:\n $sug";
$headers = 'C сайта: test <'.$emailTo.'>' . "\r\n"
. 'Отправитель: ' . $name . "\r\n" ;
$headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n";
mail($emailTo, $subject, $body, $headers, '-f'. $from );
$emailSent = true; }?>

В данном скрипте обработки обратной связи нас интересует следующий код:

mail($emailTo, $subject, $body, $headers, '-f'. $from );

Перепишем его следующим образом:

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

Вот и все.

Кстати, если у вас возникает подобная ошибка, но получается исправить при помощи моего решения. То первым делом проверяйте кодировку самого файла, она должна быть UTF-8(UTF — не должно быть маленькими буквами).

P.S.: Чтобы расшифровать крокозябры, можно воспользоваться полезнымдекодером от Артема Лебедева.

Возникнут вопросы, спрашивайте. Обязательно помогу!

27.04.2015 22:05
1101

Комментарии

Нет комментариев. Ваш будет первым!
Загрузка...