URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 3138
[ Назад ]

Исходное сообщение
"Кодировки в письмах из PHP"

Отправлено TLS , 06-Мрт-05 19:50 
Проблема следующая. Есть скрипт рассылки, который (грубо говоря) берет текст, который администратор передает ему из веб-формы, приставляет к нему всякие заголовки и отправляет это всё в mail().

Мне некоторые товарищи жалуются, что письма приходят нечитабельные. Я готов допустить что эти люди не умеют пользоваться установками кодировки в своем мыл-клиенте, но это всё равно "некозяво".
Правильно ли я понимаю что при такой схеме кодировка получается такой же, какая у администратора в браузере стоит? Есть ли специальные SMTP-хедеры, которые можно присобачить, чтобы они явно указывали кодировку? Как в PHP можно перекодировать русский текст из одной кодировки в другую?

Спасибо!


Содержание

Сообщения в этом обсуждении
"Кодировки в письмах из PHP"
Отправлено markko , 08-Мрт-05 08:05 
Укажи в заголовке:

Mime-Version: 1.0
Content-Type: text/plain; charset=Windows-1251
Content-Transfer-Encoding: 8bit

Всё.


"Кодировки в письмах из PHP"
Отправлено Simps , 09-Мрт-05 18:16 
>Укажи в заголовке:
>
>Mime-Version: 1.0
>Content-Type: text/plain; charset=Windows-1251
>Content-Transfer-Encoding: 8bit
>
>Всё.

Я делал так
    function sendMail($subject, $body) {
       $body = convert_cyr_string($body,"w","k");
      $subject = convert_cyr_string($subject,"w","k");
      mail($this->email, $subject, $body,
     "From: your@mail.ru\r\n"
    ."Reply-To: your@mail.ru\r\n"
    ."Content-Type: text/plain; charset=koi8-r\r\n"
    ."Organization: My org\r\n"
    ."X-Mailer: PHP/" . phpversion());
    }


"Кодировки в письмах из PHP"
Отправлено TLS , 09-Мрт-05 19:37 
>    $body = convert_cyr_string($body,"w","k");
А откуда уверенность что исходная кодировка - win1251? А если вдруг станет koi? Или такая ситуёвина невозможна в принципе?

"Кодировки в письмах из PHP"
Отправлено Simps , 10-Мрт-05 09:27 
>>    $body = convert_cyr_string($body,"w","k");
>А откуда уверенность что исходная кодировка - win1251? А если вдруг станет
>koi? Или такая ситуёвина невозможна в принципе?

Я думаю, нет я даже уверен, что я знаю исходную кодировку =)


"Кодировки в письмах из PHP"
Отправлено dev , 10-Мрт-05 15:06 
>>    $body = convert_cyr_string($body,"w","k");
>А откуда уверенность что исходная кодировка - win1251? А если вдруг станет
>koi? Или такая ситуёвина невозможна в принципе?

Браузер всегда шлет данные в той кодировке, в которой он получил страничку.
Если юзер поменял кодировку вручную, то он сам себе злой буратина.


"Кодировки в письмах из PHP"
Отправлено tower , 09-Мрт-05 21:21 
Есть функция conver_cyr_string, которая переводит из одной кодировки в другую. Из кои в вин-1251 и наоборот и из других тоже.

В заголовках письма есть такой
Content-Type: text/html; charset=windows-1251

где вместо windows-1251 пишеш нужную кодировку.

Тебе перекодировывать не нужно , просто укажи в письмах кодировку, которая стоит на твоем сайте.


"Кодировки в письмах из PHP"
Отправлено markko , 10-Мрт-05 14:37 
>Есть функция conver_cyr_string, которая переводит из одной кодировки в другую. Из кои
>в вин-1251 и наоборот и из других тоже.
>
>В заголовках письма есть такой
>Content-Type: text/html; charset=windows-1251
>
>где вместо windows-1251 пишеш нужную кодировку.
>
>Тебе перекодировывать не нужно , просто укажи в письмах кодировку, которая стоит
>на твоем сайте.

Ключевой фигурой в данной проблеме выступают строки:
Mime-Version: 1.0
Content-Transfer-Encoding: 8bit

Сама кодировка - это второстепенно, и как сказали самовыставляемо.
Content-Type: text/plain; charset=Windows-1251

А вот если не установить предыдущие два пункта, то по пути сообщения другие МТА погут изменить заголовок и ваша кодировка исчезнет по пути следования сообщения.


"Кодировки в письмах из PHP"
Отправлено Дмирий , 05-Апр-08 03:31 
У меня заголовки приходят в непонятной кодировке, хотя сам текст сообщения - нормально.

Тема:      ����� �200804050323
Кому:      "A-�����" {скрыто}
Срочность:      Обычное

код:

$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=windows-1251\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= "From: ".$_POST["EMAIL"]."\r\n";
mail($to, $subject, $message, $headers);

в чем ошибка?


"Кодировки в письмах из PHP"
Отправлено dev , 05-Апр-08 04:43 
>[оверквотинг удален]
>
>код:
>
>$headers  = "MIME-Version: 1.0\r\n";
>$headers .= "Content-type: text/plain; charset=windows-1251\r\n";
>$headers .= "Content-Transfer-Encoding: 8bit\r\n";
>$headers .= "From: ".$_POST["EMAIL"]."\r\n";
>mail($to, $subject, $message, $headers);
>
>в чем ошибка?

Указанная кодировка распространяется только на тело письма. В хедере не-ASCII символы использовать нельзя.

См. RFC2047 и http://www.opennet.me/openforum/vsluhforumID4/220.html