Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблемы с кодировкой на почте
 
 автор: Trivium   (25.08.2008 в 14:35)   письмо автору
 
 

Доброго времени суток!
У меня такая проблема:
При отправке писем на почту на mail.ru допустим в кодировках любых UTF-8, Win-1251, KOI8-R при просмотре через браузер всё нормально показывается, но в Outlook'е показывается всё в KOI8-R и получается фигня, и даже когда кодировку письма ставлю KOI8-R всё приходит в ней но тоже получается фигня, в чём может быть проблема?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 15:09)   письмо автору
 
   для: Trivium   (25.08.2008 в 14:35)
 

Если Вы не указываете кодировку - жаловаться по меньшей мере странно.
Равно как и если Вы указываете koi8-r , а текст на самом деле в windows-1251.
А вот если текст у Вас в koi8-r и В Content-type стоит то же самое - тогда странно.
Впрочем, и это объяснимо, если Вы при этом не применяете адекватный Content-Transfer-Encoding .

Надо смотреть код.

  Ответить  
 
 автор: Trivium   (25.08.2008 в 15:23)   письмо автору
 
   для: Trianon   (25.08.2008 в 15:09)
 

mail('lalala@mail.ru', 'Тема письма, 'Текст письма', 'MIME-Version: 1.0'."\r\n".'Content-type: text/html;charset=Windows-1251' . "\r\n".' To: Вася Пупочкин <lalala@mail.ru>' . "\r\n"
.'From: some site <no-reply@somesite.com>' . "\r\n");

  Ответить  
 
 автор: Trianon   (25.08.2008 в 15:43)   письмо автору
 
   для: Trivium   (25.08.2008 в 15:23)
 

пробел между text/html; и charset= пожалели?
Поставьте. Кстати, почему html, а не plain?

И как я уже сказал, лучше бы текст письма завернуть в base64 (в него проще) и выставить соответствующий Content-Transfer-Encoding.

  Ответить  
 
 автор: Trivium   (25.08.2008 в 16:11)   письмо автору
 
   для: Trianon   (25.08.2008 в 15:43)
 

>пробел между text/html; и charset= пожалели?
Ну там он в принципе не обязателен)
>Поставьте. Кстати, почему html, а не plain?
Потому-что в тексте есть тэг a
>
>И как я уже сказал, лучше бы текст письма завернуть в base64 (в него проще) и выставить соответствующий Content-Transfer-Encoding.
в смысле как это сделать?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 17:52)   письмо автору
 
   для: Trivium   (25.08.2008 в 16:11)
 

>>пробел между text/html; и charset= пожалели?
>Ну там он в принципе не обязателен)
тут можно было бы поспорить, но мне лень.

>>Поставьте. Кстати, почему html, а не plain?
>Потому-что в тексте есть тэг a
если есть тег а, то еще должен быть как минимум тег html и тег body :)

>>И как я уже сказал, лучше бы текст письма завернуть в base64 (в него проще) и выставить соответствующий Content-Transfer-Encoding.
>в смысле как это сделать?

$encoded_text = chunk_split(base64_encode($text));

ну и
Content-Transfer-Encoding: base64\r\n
в строку заголовка

  Ответить  
 
 автор: coba   (25.08.2008 в 17:38)   письмо автору
 
   для: Trivium   (25.08.2008 в 15:23)
 

И все равно в таком случае тема будет нечитаемой, ей то кодировку не задали...

  Ответить  
 
 автор: sim5   (25.08.2008 в 17:40)   письмо автору
 
   для: coba   (25.08.2008 в 17:38)
 

А вы ей и не зададите. Если даже перед темой вы пошлете заголовок указывающий на кодировку, то еще не факт, что вы прочитаете ее, если она на русском писана.

  Ответить  
 
 автор: Trianon   (25.08.2008 в 17:54)   письмо автору
 
   для: sim5   (25.08.2008 в 17:40)
 

>А вы ей и не зададите.
Почему?

  Ответить  
 
 автор: sim5   (25.08.2008 в 18:18)   письмо автору
 
   для: Trianon   (25.08.2008 в 17:54)
 

Я имел ввиду, что передача такого же заголовка как и для сообщения, задачи не решает - не на всех почтовых клиентах и серверах это прокатывает. А вот кодирование темы с указанием кодировки, это и есть решение.

  Ответить  
 
 автор: coba   (25.08.2008 в 17:54)   письмо автору
 
   для: sim5   (25.08.2008 в 17:40)
 

Т.е. как это не зададите?
Вот самый простой пример
'=?Windows-1251?Q?Моя тема?='

  Ответить  
 
 автор: Trianon   (25.08.2008 в 18:02)   письмо автору
 
   для: coba   (25.08.2008 в 17:54)
 

>Вот самый простой пример
>'=?Windows-1251?Q?Моя тема?='

угу. простой пример с ошибкой.

  Ответить  
 
 автор: coba   (25.08.2008 в 18:15)   письмо автору
 
   для: Trianon   (25.08.2008 в 18:02)
 

Вы имеете заглавную букву W?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 18:19)   письмо автору
 
   для: coba   (25.08.2008 в 18:15)
 

Я имею в виду (в порядке уменьшения значимости)
а) незакодированный пробел, встретившийся в кодовом слове
б) незакодированные символы за рамками набора ASCII
ну и если желаете в) заглавную букву W :) хотя я не припоминаю такого ограничения...

  Ответить  
 
 автор: coba   (25.08.2008 в 18:48)   письмо автору
 
   для: Trianon   (25.08.2008 в 18:19)
 

Перелопатил RFC2047 и не нашел жесткого указания на замену пробела, нашел только пожеляния
4.2. The "Q" encoding

The "Q" encoding is similar to the "Quoted-Printable" content-
transfer-encoding defined in RFC 2045. It is designed to allow text
containing mostly ASCII characters to be decipherable on an ASCII
terminal without decoding.

(1) Any 8-bit value may be represented by a "=" followed by two
hexadecimal digits. For example, if the character set in use
were ISO-8859-1, the "=" character would thus be encoded as
"=3D", and a SPACE by "=20". (Upper case should be used for
hexadecimal digits "A" through "F".)

(2) The 8-bit hexadecimal value 20 (e.g., ISO-8859-1 SPACE) may be
represented as "_" (underscore, ASCII 95.). (This character may
not pass through some internetwork mail gateways, but its use
will greatly enhance readability of "Q" encoded data with mail
readers that do not support this encoding.) Note that the "_"
always represents hexadecimal 20, even if the SPACE character
occupies a different code position in the character set in use.

(3) 8-bit values which correspond to printable ASCII characters other
than "=", "?", and "_" (underscore), MAY be represented as those
characters. (But see section 5 for restrictions.) In
particular, SPACE and TAB MUST NOT be represented as themselves
within encoded words.

  Ответить  
 
 автор: Trianon   (25.08.2008 в 19:00)   письмо автору
 
   для: coba   (25.08.2008 в 18:48)
 

Третий абзац собственной выдержки прочтите - найдете требование.

  Ответить  
 
 автор: coba   (25.08.2008 в 19:23)   письмо автору
 
   для: Trianon   (25.08.2008 в 19:00)
 

may be это не значит должны быть
may be это могут быть!!!

  Ответить  
 
 автор: Trianon   (25.08.2008 в 19:25)   письмо автору
 
   для: coba   (25.08.2008 в 19:23)
 

correspond to printable ASCII characters ... MAY BE

In particular, SPACE and TAB MUST NOT be represented as themselves within encoded words.

PS. ... никаких моих сил не хватает...

  Ответить  
 
 автор: coba   (25.08.2008 в 19:33)   письмо автору
 
   для: Trianon   (25.08.2008 в 19:25)
 

Хорошо, сдаюсь, убедили.

  Ответить  
 
 автор: Trianon   (25.08.2008 в 17:53)   письмо автору
 
   для: coba   (25.08.2008 в 17:38)
 

>И все равно в таком случае тема будет нечитаемой, ей то кодировку не задали...
т.е. если заголовок оформили с нарушением RFC .
Конечно.

  Ответить  
 
 автор: Trivium   (25.08.2008 в 19:05)   письмо автору
 
   для: Trianon   (25.08.2008 в 17:53)
 

Теперь тема нормальная а тело такое же как было...
Поставил тему '=?Windows-1251?Q?Тема письма?='
Текст: chunk_split(base64_encode($text)) и пробовал '=?Windows-1251?Q?'.$text.'?='
Заголовки: 'MIME-Version: 1.0'."\r\n".'Content-type: text/html; Charset=Windows-1251'."\r\n".'Content-Transfer-Encoding: base64 ' . "\r\n".' To: AAA <lalala@mail.ru>' . "\r\n"
.'From: bububu <bububu@somesite.com>' . "\r\n"
Что можно с текстом сделать ещё?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 19:21)   письмо автору
 
   для: Trivium   (25.08.2008 в 19:05)
 

>Поставил тему '=?Windows-1251?Q?Тема письма?='
я уже объяснил, почему так нельзя.

>Что можно с текстом сделать ещё?
Не видно здесь текста. Да и заголовка не видно - одни обрывки.
Может Вы покажете, что у Вас получилось? Чего гадать-то?

  Ответить  
 
 автор: Trivium   (25.08.2008 в 20:11)   письмо автору
 
   для: Trianon   (25.08.2008 в 19:21)
 

>>Поставил тему '=?Windows-1251?Q?Тема письма?='
>я уже объяснил, почему так нельзя.
Ну может так и нельзя, но факт тот что работает)))
>
>>Что можно с текстом сделать ещё?
>Не видно здесь текста. Да и заголовка не видно - одни обрывки.
>Может Вы покажете, что у Вас получилось? Чего гадать-то?
Ну получился текст в KOI8-R, точно тот же текст в Win-1251 но отображается в KOI8 и его не видно... ничего не помогает

  Ответить  
 
 автор: Trivium   (25.08.2008 в 20:54)   письмо автору
 
   для: Trivium   (25.08.2008 в 20:11)
 

всем спасиба всё заработало)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования