Справочник по PHP

Решение проблемы кодировок


Я не зря выше привел пример отправки письма со словами латинского алфавита. Их любой почтовый клиент прочтет без труда. Но вот с русским алфавитом труднее. Русских кодировок существует огромное множество. И от того, насколько умело Вы перекодируете письмо, будет зависеть прочтет ли получатель его, или не будет возиться с установкой нужной кодировки и просто удалит его в корзину.

Кодировку письма задает заголовок Content-type:

$header="From: "\Evgen"\ <evgen@mail.ru>";$header.="Content-type: text/plain; charset=\"windows-1251\"";$subject="Тема письма";$msg="Сторака 1\nСтрока 2\nСтрока 3";mail("name@mail.ru", $subject, $msg, $header);

В заголовке мы указали, что тип письма будет простой текст, а кодировка - Windows.

Теперь наше письмо придет в понятной для почтового клиента кодировке.

Но стоит отметить, что в некоторых случаях в правильной кодировке будет отображено только само письмо. Заголовок же так и останется нечитаемым. Связано это с тем, где расположен заголовок Content-type относительно заголовка Subject, который и содержит тему письма. Дело в том, что существуют почтовые программы, которые понимают заголовок Content-type, но не понимают русский текст в поле Subject, если это поле стоит до Content-type. В то же время, другие почтовые программы обязывают нас задавать Content-type последним заголовком в списке. Чтобы обойти эти препятствия, можно разместить поле Content-type сразу в начале и в конце списка заголовков:

$subject="Тема письма";$header="Content-type: text/plain; charset=\"windows-1251\"";$header.="From: "\Evgen"\ <evgen@mail.ru>";$header.="Subject: $subject";$header.="Content-type: text/plain; charset=\"windows-1251\"";$msg="Сторака 1\nСтрока 2\nСтрока 3";mail("name@mail.ru", $subject, $msg, $header);

Теперь это письмо прочтет любая почтовая программа!



Содержание раздела