воскресенье, 23 января 2011 г.

Корректная кодировка subject .

Часто бывает,  при отсылке письма с русскими символами в поле "тема" они заменяются на знаки  вопроса.
Например так: 

Этого можно очень просто избежать.


Посмотрим на код, который вот так вот глючит.
$headers=array();
$headers .= 'From: tracking-api@web2.qwerty.name' . "\r\n";
$headers .= 'Content-type: text/plain; charset=windows-1251' . "\r\n";
mail('*@lazutov.ru', 'tracking updated(стол, wifi свисток)', $msg, $headers);
Естественно скрипт сам находится в win-1251 и эта кодировка корректно распознаётся в теле письма.

Чтобы указать кодировку subject необходимо сделать одно  простое преобразование


mail('*@lazutov.ru', '=?windows-1251?B?'.
          base64_encode('tracking updated(стол, wifi свисток)').
          '?=', $str, $headers);
Результат:



Как видите, всё работает. Для убедительности посмотрим заголовки(до и после)

Subject: tracking updated(стол, wifi свисток)
Subject: =?windows-1251?B?dHJhY2tpbmcgdXBkYXRlZCjx8u7rLCB3aWZpIPHi6PHy7uop?=


как видите, мы насильно указали кодировку, а само тело темы закодировали алгоритмом base64, который позоляет передавать любойю информацию в виде ASCII-символов.

Это решение применимо при следующих проблемах
  1. неверная кодировка mail()
  2. неверная кодировка темы
  3. Вопросы в теме
  4. Кодировка mail() в php

Комментариев нет:

Отправить комментарий