Ф-я mail и кодировка subject

Дмитрий
На сайте с 23.08.2006
Offline
222
2456

Хочу отправлять письма в utf-8. Если тему письма оставить в win-1251 либо просто конвертить в utf-8 - она нечитаема. Прочитал, что нужно делать так:

$subject = '=?utf-8?B?'.base64_encode(iconv('windows-1251', 'UTF-8', 'тут тема письма')).'?=';

но у меня не получается никак заставить правильно работать. Тема письма и имя отправителя в Outlook'е кракозябрами. Подскажите кто как справился с проблемой

Разрабатываю и автоматизирую на php http://jonnyb.ru/
SD
На сайте с 16.10.2006
Offline
62
#1

$subject = iconv("windows-1251","UTF-8","ТЕМА письма");

Функция iconv Преобразует строку из одной кодировки в другую

string iconv ( string in_charset, string out_charset, string str )

А кто вам про base64_encode сказал? Это совсем из другой оперы...

PHP Web Developer, traveler, blogger, journalist
dkameleon
На сайте с 09.12.2005
Offline
386
#2

Есть более правильная функция:

mb_encode_mimeheader

Если подстановкой в сабжект не получается, попробуйте конвертировать и в кастом заголовках вставить.

Дизайн интерьера (http://balabukha.com/)
SD
На сайте с 16.10.2006
Offline
62
#3

А, и кстати, не забудьте в заголовках письма (Имеется ввиду header) добавить инфу о выбранной кодировке:

$mailheaders = "Content-Type: text/plain; charset=UTF-8\r\n";

Дмитрий
На сайте с 23.08.2006
Offline
222
#4

ShaDeRzz, отправьте письмо в кодировке utf-8, просто преобразовав кодировку сабжа. После прочитайте http://forum.pyha.ru/printpage/50.0

Дмитрий
На сайте с 23.08.2006
Offline
222
#5

dkameleon, псб, понял куда копать.

А строка отдается уже закодированной в utf-8 или нет (win-1251)? У меня ни так ни сяк неполучилось :(

mb_encode_mimeheader(iconv('windows-1251', 'UTF-8', $subject), 'UTF-8', 'B')
-
На сайте с 07.12.2005
Offline
97
-K-
#6

Используйте готовое решение, к примеру phpmailer

dkameleon
На сайте с 09.12.2005
Offline
386
#7
JonnyB:
У меня ни так ни сяк неполучилось

На глаз, код нормальный. Может это у вас почтовая программа не понимает? :)

SD
На сайте с 16.10.2006
Offline
62
#8
JonnyB:
ShaDeRzz, отправьте письмо в кодировке utf-8, просто преобразовав кодировку сабжа. После прочитайте http://forum.pyha.ru/printpage/50.0

Отправлял. Съедает букву "Я", а так всё в порядке.

Возможно эта функция вам поможет. Она конвертирует строку из 1251 кодировки в UTF8

<?php

function CP1251toUTF8($str){ // (C) SiMM, $table from http://ru.wikipedia.org/wiki/CP1251
static $table = array("\xA8" => "\xD0\x81", // Ё
"\xB8" => "\xD1\x91", // ё
// украинские символы
"\xA1" => "\xD0\x8E", // Ў (У)
"\xA2" => "\xD1\x9E", // ў (у)
"\xAA" => "\xD0\x84", // Є (Э)
"\xAF" => "\xD0\x87", // Ї (I..)
"\xB2" => "\xD0\x86", // I (I)
"\xB3" => "\xD1\x96", // i (i)
"\xBA" => "\xD1\x94", // є (э)
"\xBF" => "\xD1\x97", // ї (i..)
// чувашские символы
"\x8C" => "\xD3\x90", // &#1232; (A)
"\x8D" => "\xD3\x96", // &#1238; (E)
"\x8E" => "\xD2\xAA", // &#1194; (С)
"\x8F" => "\xD3\xB2", // &#1266; (У)
"\x9C" => "\xD3\x91", // &#1233; (а)
"\x9D" => "\xD3\x97", // &#1239; (е)
"\x9E" => "\xD2\xAB", // &#1195; (с)
"\x9F" => "\xD3\xB3", // &#1267; (у)
);
return preg_replace('#[\x80-\xFF]#se',
' "$0" >= "\xF0" ? "\xD1".chr(ord("$0")-0x70) :
("$0" >= "\xC0" ? "\xD0".chr(ord("$0")-0x30) :
(isset($table["$0"]) ? $table["$0"] : "")
)',
$str
);
}
?>
Дмитрий
На сайте с 23.08.2006
Offline
222
#9

dkameleon, Outlook глуппий :)

ShaDeRzz, у меня проблема не с перекодировкой символов в utf-8. Отправьте мне пожалуйста письмо в кодировке utf-8 на workeml@mail.ru

SD
На сайте с 16.10.2006
Offline
62
#10

гы... пытался помочь человеку, а в ответ репутация -51. Спасибо огромное.

JonnyB:
Отправьте мне пожалуйста письмо в кодировке utf-8 на workeml@mail.ru

Давайте уже в субботу (Тоесть сегодня) - мне самому интересен ваш вопрос. Сегодня потерял пол-дня рабочего времени на поиск вариантов решения. Почувствовал себя валенком, но у меня оба предложенных мною вариантов на собственном сервере работают.

С удовольствием поучавтсвую в дальнейшем решении вопроса, но только когда высплюсь.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий