DataLife Engine > PHP > PHP кодировка писем

PHP кодировка писем


1 ноября 2007. Разместил: podpole
У меня часто спрашивают, как отсылать письма с помощью php в правильной кодировке: после отправки письма с русскими буквами, на почту людям приходит абракадабра.

А все дело в том, что для почты у нас принято использовать кодировку koi8-r, а для веба - win-1251 (ansi) - так, и выходит - мы шлем с сайтов в win-1251, а почтовые программы открывают его как koi8-r...

Выходов из ситуации хватает. Начиная, можно на самой веб странице можно использовать кодировку koi8-r. Но я бы не советовал этого не делать - у некоторых посетителей могут возникнуть с кодировкой на самой странице. Так что оставим этот метод для ламеров, а применим более изящный, на php.

Итак, что же можно сделать? Первое что приходит в голову - а не проще ли перекодировать само сообщение? И в правду, нет нечего проще.


Тем более в php предусмотрена стандартная процедура - convert_cyr_string(string str, string from, string to); как Вы уже, наверное, догадались, функция перекодирует текст, содержащийся в переменной $str из кодировки $from в кодировку $to. Указание кодировки происходит посредством символов латинского алфавита, вот доступные параметры и соответствующие им кодировки:

k koi8-r
w win-1251
i iso8859-5
a x-cp866
d x-cp866
m x-mac-cyrillic


Как видно из таблицы, в нашем случае, перед отправкой сообщения, содержащегося в переменной $msg, его нужно перекодировать из w в k (из win-1251 в koi8-r), это выглядит так: $msg = convert_cyr_string ($msg,w,k); вот и все, теперь можно спокойно отсылать наше письмо.