PHP кодировка писем
У меня часто спрашивают, как отсылать письма с помощью 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 | ISO 8859-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'); Вот и все, теперь можно спокойно отсылать наше письмо.