- PHP письма приходят в кракозябрах. Заголовок письма php mail() в кракозябрах
- Читайте также
- Из формы отправки сообщения на e-mail приходят «иероглифы»
- Кодировка при отправке почты функцией mail() в php
- Кодировка при отправке почты функцией mail() в php
- PHP письма приходят в кракозябрах. Заголовок письма php mail() в кракозябрах
- Читайте также
PHP письма приходят в кракозябрах. Заголовок письма php mail() в кракозябрах
Очень частая и неудобная ситуация, когда мы отправляем письмо за счет PHP mail, а оно приходит в кракозябрах. Может портиться как все письмо, так и его часть, например, тело или только заголовок. Все эти проблемы из-за неправильно выбранной кодировки.
Общие решения проблемы с кодировкой.
1а. Если письма отправляются в кодировке UTF-8, то переводим кодировку сайта в UTF-8. Если не помогает, то прописываем в самом начале страницы: без лишних пробелов.
1б. Если письма отправляются в кодировке windows-1251, то переводим кодировку сайта в windows-1251 (ANSI). Также можно прописать в начале сайта
2. При отправке писем, можно попробавть использовать преобразователи кодировок на те переменные, которые передаются в письме: $text = iconv(‘utf-8’, ‘windows-1251’, $text); или $text = iconv(‘windows-1251′’, ‘utf-8’, $text);
3. Бывает, что приходит в письме только заголовок в кракозябрах , для этого изменяем его кодировку отдельно. Пример:
$to = ‘admin@mail.ru’;
$subject = ‘=?utf-8?B?’.base64_encode(‘Новое сообщение!’).’?=’;
$headers = ‘From: =?UTF-8?B?’ . base64_encode($name) . ‘?= \r\n»;
$headers .= ‘Return-path: \r\n»;
$headers .= ‘Content-type: text/plain; charset=utf-8’ . «\r\n»;
$headers .= ‘Content-Transfer-Encoding: quoted-printable’ . «\r\n\r\n»;
$message = «Новый запрос!\n\nИмя: $name\n\nEmail: $email\n\nТелефон: $tel\n\n»;
$mail = mail($to, $subject, $message, $headers);
ps Если Кодировка сайта UTF-8, а в заголовке письма и от кого приходят кракозябры, то меняем $subject = ‘Новое сообщение!; на $subject = ‘=?utf-8?B?’.base64_encode(‘Новое сообщение!’).’?=’;
Не забывайте, что на главной странице, внизу всегда актуальный список программ-сервисов.
Читайте также
blogprogram.ru | 2014-05-07 | PHP письма приходят в кракозябрах. Заголовок письма php mail() в кракозябрах | Очень частая и неудобная ситуация, когда мы отправляем письмо за счет PHP mail, а оно приходит в кракозябрах. Может портиться как все письмо, так и ег |
Из формы отправки сообщения на e-mail приходят «иероглифы»
Добрый день.
Отправляя письмо из формы отправки со своего сайта, на e-mail адресату приходят непонятные символы.
Во многих статьях пишут, что дело в кодировке. Однако я проверил кодировку в обоих файлах: html-файл заполнения формы и php-файл передачи данных на e-mail.
В обоих файла кодировка utf-8 без BOM.
Ниже прикрепляю коды обоих файлов и результат, который приходит на e-mail.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
html> head> meta http-equiv="Content-Type" content="text/html; charset=utf-8"> title>Форма оформления заказа/title> /head> body> form action="formdata.php" method="POST" name="form1":> p>label> Введите Ваше имяinput type="text" name="name" size="30" maxlength="20">label>/p> p>label> Введите номер Вашего телефонаinput type="text" name="phone" size="30" maxlength="20">label>/p> p>label> Введите номер выбранного Вами аксессуара (указан рядом с ценой)input type="text" name="acss" size="5" maxlength="5">label>/p> p>label> Введите адрес, где Вам будет удобно получить товар (доставка осуществляется бесплатно практически во все районы города)input type="text" name="address" size="40" maxlength="50">label>/p> p>label for="text">Здесь вы можете написать Ваши пожелания по заказу:/label>/p> p>textarea name="text" cols="50" rows="6">/textarea>/p> p>input type="reset" name="reset" value="Сбросить все введенные данные"> p>input type="image" src="images/ibutton.png" name="imagebutton"/p> /form> /body> /html>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
/* Осуществляем проверку вводимых данных и их защиту от враждебных скриптов */ $name = htmlspecialchars($_POST["name"]); $phone = htmlspecialchars($_POST["phone"]); $acss = htmlspecialchars($_POST["acss"]); $address = htmlspecialchars($_POST["address"]); /* Устанавливаем e-mail адресата */ $myemail = "cases174@mail.ru"; /* Проверяем заполнены ли обязательные поля ввода, используя check_input функцию */ $name = check_input($_POST["name"], "Пожалуйста, введите Ваше имя!"); $phone = check_input($_POST["phone"], "Укажите, пожалуйста, номер Вашего телефона! (Нужен, для того чтобы мы могли связаться с Вами)."); $acss = check_input($_POST["acss"], "Пожалуйста, введите номер выбранного Вами аксессуара (указан рядом с ценой, написан синими цифрами. Пример: #0000"); $address = check_input($_POST["address"], "Укажите, пожалуйста, адрес Вашего местонахождения, чтобы мы могли знать, куда нужно доставить Ваш заказ"); /* Создаем новую переменную, присвоив ей значение */ $message_to_myemail = "Здравствуйте! Вашей контактной формой было отправлено сообщение! Имя отправителя: $name Телефон: $phone Выбранный аксессуар: $acss Адрес: $address Пожелания к заказу: $text Конец"; /* Отправляем сообщение, используя mail() функцию */ $from = "From: $yourname $email> \r\n Reply-To: $email \r\n"; mail($myemail, $tema, $message_to_myemail, $from); ?>Ваше сообщение было успешно отправлено!
На Главную >>>
/* Если при заполнении формы были допущены ошибки сработает следующий код: */ function check_input($data, $problem = "") { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); if ($problem && strlen($data) == 0) { show_error($problem); } return $data; } function show_error($myError) { ?>Пожалуйста, исправьте следующую ошибку:
echo $myError; ?> exit(); } ?>
Кодировка при отправке почты функцией mail() в php
приходит в виде «?». Непонятно почему только некоторые буквы заменяются на «?».
Функция отправки почты вот такая:
function mail_utf8($to, $from, $subject, $message)
<
$subject = ‘=?UTF-8?B?’ . base64_encode($subject) . ‘?=’;
$headers = «MIME-Version: 1.0\r\n»;
$headers .= «Content-type: text/html; charset=utf-8\r\n»;
$headers .= «Content-Transfer-Encoding: 8bit \r\n»;
$headers .= «From: $from\r\n»;
return mail($to, $subject, $message, $headers);
>
Кодировка скрипта utf-8. Текст письма формируется из данных, которые берутся из БД MySQL. База также в uft-8. Эти же данные на сайте выводятся верно.
Из-за чего может быть неверный вывод некоторых символов в письме?
Начало текста удалилось:
Суть проблемы вот в чем: при отправке письма средствами функции mail() в php часть кириллических символов тела письма приходит в виде «?! ?». Непонятно почему только некоторые буквы заменяются на «?! ?».
Народ, читайте, пожалуйста, внимательней.
Скрипт в utf-8, база в utf-8. Вывод на экран без ошибок.
При отправке на почту ЧАСТЬ символов искажена, не весь текст.
Вот пример:
Беспл! атная доставка Вашего заказа по в? ! ?ей России
Народ, читайте, пожалуйста, внимательней.
Скрипт в utf-8, база в utf-8. Вывод на экран без ошибок.
При отправке на почту ЧАСТЬ символов искажена, не весь текст.
Вот пример:
Беспл! атная доставка Вашего заказа по в? ! ?ей России
$headers = array();
$headers[] = «MIME-Version: 1.0»;
$headers[] = «Content-type: text/plain; charset=utf-8»;
$headers[] = «From: Sender Name «;
$headers[] = «Bcc: JJ Chong < bcc@domain2.com >«;
$headers[] = «Reply-To: Recipient Name «;
$headers[] = «Subject: «;
$headers[] = «X-Mailer: PHP/».phpversion();
mail($to, $subject, $email, implode(«\r\n», $headers));
Обратите внимание на эту строчку:
$headers[] = «Content-type: text/plain; charset=utf-8»;
Важно: страница, с которой отправляете письмо, должна иметь такую же кодировку, в данном случае utf-8
Кодировка при отправке почты функцией mail() в php
приходит в виде «?». Непонятно почему только некоторые буквы заменяются на «?».
Функция отправки почты вот такая:
function mail_utf8($to, $from, $subject, $message)
<
$subject = ‘=?UTF-8?B?’ . base64_encode($subject) . ‘?=’;
$headers = «MIME-Version: 1.0\r\n»;
$headers .= «Content-type: text/html; charset=utf-8\r\n»;
$headers .= «Content-Transfer-Encoding: 8bit \r\n»;
$headers .= «From: $from\r\n»;
return mail($to, $subject, $message, $headers);
>
Кодировка скрипта utf-8. Текст письма формируется из данных, которые берутся из БД MySQL. База также в uft-8. Эти же данные на сайте выводятся верно.
Из-за чего может быть неверный вывод некоторых символов в письме?
Начало текста удалилось:
Суть проблемы вот в чем: при отправке письма средствами функции mail() в php часть кириллических символов тела письма приходит в виде «?! ?». Непонятно почему только некоторые буквы заменяются на «?! ?».
Народ, читайте, пожалуйста, внимательней.
Скрипт в utf-8, база в utf-8. Вывод на экран без ошибок.
При отправке на почту ЧАСТЬ символов искажена, не весь текст.
Вот пример:
Беспл! атная доставка Вашего заказа по в? ! ?ей России
Народ, читайте, пожалуйста, внимательней.
Скрипт в utf-8, база в utf-8. Вывод на экран без ошибок.
При отправке на почту ЧАСТЬ символов искажена, не весь текст.
Вот пример:
Беспл! атная доставка Вашего заказа по в? ! ?ей России
$headers = array();
$headers[] = «MIME-Version: 1.0»;
$headers[] = «Content-type: text/plain; charset=utf-8»;
$headers[] = «From: Sender Name «;
$headers[] = «Bcc: JJ Chong < bcc@domain2.com >«;
$headers[] = «Reply-To: Recipient Name «;
$headers[] = «Subject: «;
$headers[] = «X-Mailer: PHP/».phpversion();
mail($to, $subject, $email, implode(«\r\n», $headers));
Обратите внимание на эту строчку:
$headers[] = «Content-type: text/plain; charset=utf-8»;
Важно: страница, с которой отправляете письмо, должна иметь такую же кодировку, в данном случае utf-8
PHP письма приходят в кракозябрах. Заголовок письма php mail() в кракозябрах
Очень частая и неудобная ситуация, когда мы отправляем письмо за счет PHP mail, а оно приходит в кракозябрах. Может портиться как все письмо, так и его часть, например, тело или только заголовок. Все эти проблемы из-за неправильно выбранной кодировки.
Общие решения проблемы с кодировкой.
1а. Если письма отправляются в кодировке UTF-8, то переводим кодировку сайта в UTF-8. Если не помогает, то прописываем в самом начале страницы: без лишних пробелов.
1б. Если письма отправляются в кодировке windows-1251, то переводим кодировку сайта в windows-1251 (ANSI). Также можно прописать в начале сайта
2. При отправке писем, можно попробавть использовать преобразователи кодировок на те переменные, которые передаются в письме: $text = iconv(‘utf-8’, ‘windows-1251’, $text); или $text = iconv(‘windows-1251′’, ‘utf-8’, $text);
3. Бывает, что приходит в письме только заголовок в кракозябрах , для этого изменяем его кодировку отдельно. Пример:
$to = ‘admin@mail.ru’;
$subject = ‘=?utf-8?B?’.base64_encode(‘Новое сообщение!’).’?=’;
$headers = ‘From: =?UTF-8?B?’ . base64_encode($name) . ‘?= \r\n»;
$headers .= ‘Return-path: \r\n»;
$headers .= ‘Content-type: text/plain; charset=utf-8’ . «\r\n»;
$headers .= ‘Content-Transfer-Encoding: quoted-printable’ . «\r\n\r\n»;
$message = «Новый запрос!\n\nИмя: $name\n\nEmail: $email\n\nТелефон: $tel\n\n»;
$mail = mail($to, $subject, $message, $headers);
ps Если Кодировка сайта UTF-8, а в заголовке письма и от кого приходят кракозябры, то меняем $subject = ‘Новое сообщение!; на $subject = ‘=?utf-8?B?’.base64_encode(‘Новое сообщение!’).’?=’;
Не забывайте, что на главной странице, внизу всегда актуальный список программ-сервисов.
Читайте также
blogprogram.ru | 2014-05-07 | PHP письма приходят в кракозябрах. Заголовок письма php mail() в кракозябрах | Очень частая и неудобная ситуация, когда мы отправляем письмо за счет PHP mail, а оно приходит в кракозябрах. Может портиться как все письмо, так и ег |