Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » php + utf-8 + mail ()

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Hostage



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уж и не знаю сюда или в системное администрирование.. где то на стыке, наверно.
 
Помогите, братцы. Док с манами перекурил уже многа-многа, а просветления не наступило. FreeBSD 9.2. Русская UTF-8 локаль. exim-4.80.1-2. PHP 5.4.20.  
 
nginx, php-fpm (с веб вызова и с консольного вызова php script.php ситуация аналогична)
 
<?php
$to = "user@mail.me";
$subject = "subject";
$headers = "Content-Transfer-Encoding: 8bit\nContent-type: text/plain; charset=UTF-8\nFrom: <noreply@mail.me>";
$message = "а"; // тут русская маленькая буква "а" в utf-8, то есть 0xD0B0 в кодах
mail($to, $subject, $message, $headers);
?>
 
Приходит по почте "&#208;°" или 0xC390C2B0 в кодах. Дело не в почтовом клиенте, смотрю напрямую текст в INBOX на почтовом сервере-получателе, там та же байтовая последовательность.
 
cat test.txt | mail user@mail.me, где в test.txt русский UTF-8 приходит нормально, то есть видимо дело не в почтовике, а в недрах php или функции mail() происходит ещё одно конвертирование, два байта превращаются в 4. Почему-зачем? Моск сломал.
 
default_charset = "UTF-8" в php.ini ставил. И убирал.
 
Как победить?
 
 
Добавлено:
*upd*
 
хм. движок подпарсил код.. "&#208;°" - так будет? приходит это... &#208;°
 
каким то перекодировщиком расковырял, что текст таки читается если его преобразовать ISO-8859-1 &#8594; UTF-8. То есть php берёт текст в UTF-8 и конвертит его в ISO-8859-1. С какого перепугу?

Всего записей: 23 | Зарегистр. 11-09-2003 | Отправлено: 18:16 21-12-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hostage
Perl, PHP: отправка формы на e-mail
 
при повторении кода - проблем не вижу.  
проверьте, что у вас и php скрипт в уникоде.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:47 21-12-2013
Hostage



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery Да в юникоде было, проверено конечно, стал бы писать кабы два дня не копался до того ))
 
Фуф, но разобрался. Расскажу, может кому полезно будет. Куда хитрее всё, простое быстро бы нашёл. При переходе с 5.3 на 5.4 программисты чтобы php не жаловался на deprecated функции (не кодер, как понял - типа которые устаревают) уговорили включить mbstring.func_overload. Включил. На 7, как то не подумав. В результате перегрузилась функция mail() и вместо неё вызывалась mb_send_mail(), которой надо явно конечно указывать mb_internal_encoding("UTF-8") - без этого она думает что ей угодно.  
 
указал mbstring.func_overload = 6 и всё стало шоколадно с mail(). Сам конечно виноват, помнить надо что делаешь, даже в спешке и давно.
 
 

Всего записей: 23 | Зарегистр. 11-09-2003 | Отправлено: 01:08 22-12-2013 | Исправлено: Hostage, 01:10 22-12-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » php + utf-8 + mail ()


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru