Учим WordPress правильно кодировать письма в UTF-8
Решение проблемы битых заголовков в email
Те, кто используют русскоязычную версию WordPress, наверняка не раз сталкивались с проблемой битого заголовка Subject в уведомлениях WordPress. Навреное, проще проиллюстрировать: Очевидно, что это не хорошо Более того, битая кодировка может служить критерием для определения письма спамом. Для того, чтобы убедиться, что такое отображение письма — это не ошибка почтового клиента, я написал маленький тестовый скрипт, который [...]
← Вернуться к полной версии записи «Учим WordPress правильно кодировать письма в UTF-8»…
Вложения:
- broken-header (image/png)
Сен
2008
Комментарии к статье «Учим WordPress правильно кодировать письма в UTF-8» (31) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «Учим WordPress правильно кодировать письма в UTF-8»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


Блин, извращенцы, руки оторвать
Иван, а потом как разбивать этот UTF-8 на блоки по 78 байт? По сути старая версия PHP Mailer применяла подход, похожий на Ваш, после чего в заголовках и стали попадаться кракозябры (когда символ UTF-8 бился посередине).
Собственно, приведённое извращение и борется с проблемой разбивки по блокам в соответствии с RFC.
По сути функция сама бьет строку на кодированные блоки по 78 байт.
Только в отличие от старого вордпресса корректно.
Ага, дошло, невнимательно посмотрел.
Только она требует
mbstring, а разработчики WordPress не ставятmbstringв минимальные требования для WordPress. Поэтому на серверах без расширения mbstring работать не будет.Да, и еще один момент:
Конечно не ставят, для леммингов ведь в частности делается, а в таких поделках как денвер мбстринг по умолчанию не установлен, а поставить – это ведь думать нужно, лемминги не думают. Им проще реализовать дополнительную кривую функцию, которая будет работать везде, чем отбиваться от пачки запросов почему не работает.
Вообще я не понимаю ситуации – на хостинге не установлено что-то, раз не установлено, так надо поставить, да и дубаю что mbstring будет установлен на всех по крайне мере русских хостингах, иначе это уже не хостинг, а так, детский сад.
По поводу «This function…
Я так понял могут появляться лишние пробелы при кодировании переводов строк или что-то еще
Сейчас проверил – многостроковая тема корректно кодируется и потом корректно раскодируется в кмайле, и в случае попадания пробела между котированными частями на перевод строки тоже.
Ну WordPress-то не в России разрабатывают.
Они всё не могут оставить в покое хладный труп PHP4, а тут mbstring
Вообще насколько я знаю ситуацию на америкосовских хостингах, заставить хостера поставить что-нибудь на работающий (во всех смыслах) сервер — это очень тяжело.
Я помню, как клиент неделю(!) уговаривал хостеров подключить mod_rewrite(!!!).
По-видимому, это одна из причин, по которой разработчики не хотят создавать дополнительные зависимости.
А, ну если PHP4 не закопали, то тогда все понятно
(поубивал бы
Я тоже с поддержкой PHP 5.2 в своем движке несколько вещей добавил, которые бы писались проще в 5.3, а в 5.2 не работают, но чтобы PHP4
echo $s."\n";
echo mb_encode_mimeheader($s, 'utf-8')."\n";
echo "\n\n\n";
$s = 'Ну_очень_очень_длинная_тема_без_пробелов_Ну_очень_очень_длинная_тема_без_пробелов_Ну_очень_очень_длинная_тема_без_пробелов';
echo $s."\n";
echo mb_encode_mimeheader($s, 'utf-8')."\n";
=?UTF-8?B?0J3RgyDQvtGH0LXQvdGMINC+0YfQtdC90Ywg0LTQu9C40L3QvdCw0Y8g0YI=?=
=?UTF-8?B?0LXQvNCwINCd0YMg0L7Rh9C10L3RjCDQvtGH0LXQvdGMINC00LvQuNC90L0=?=
=?UTF-8?B?0LDRjyDRgtC10LzQsCDQndGDINC+0YfQtdC90Ywg0L7Rh9C10L3RjCDQtNC7?=
=?UTF-8?B?0LjQvdC90LDRjyDRgtC10LzQsCDQndGDINC+0YfQtdC90Ywg0L7Rh9C10L0=?=
=?UTF-8?B?0Ywg0LTQu9C40L3QvdCw0Y8g0YLQtdC80LA=?=
Ну_очень_очень_длинная_тема_без_пробелов_Ну_очень_очень_длинная_тема_без_пробелов_Ну_очень_очень_длинная_тема_без_пробелов
=?UTF-8?B?0J3Rg1/QvtGH0LXQvdGMX9C+0YfQtdC90Yxf0LTQu9C40L3QvdCw0Y9f0YI=?=
=?UTF-8?B?0LXQvNCwX9Cx0LXQt1/Qv9GA0L7QsdC10LvQvtCyX9Cd0YNf0L7Rh9C10L0=?=
=?UTF-8?B?0Yxf0L7Rh9C10L3RjF/QtNC70LjQvdC90LDRj1/RgtC10LzQsF/QsdC10Ldf?=
=?UTF-8?B?0L/RgNC+0LHQtdC70L7Qsl/QndGDX9C+0YfQtdC90Yxf0L7Rh9C10L3RjF8=?=
=?UTF-8?B?0LTQu9C40L3QvdCw0Y9f0YLQtdC80LBf0LHQtdC3X9C/0YDQvtCx0LXQu9C+?=
=?UTF-8?B?0LI=?=
А у меня знаки вопроса вместо букв появляются в анонсах комментариев, которые отображаются на главной странице?
Вероятно, из-за того, что используется функция
substr()вместоmb_substr().Добрый день, Владимир.
Проблема кодировки писем актуальна по сей день. Ты -единственный, кто пролил свет на этот злой глюк. Скажи пожалуйста, как следует понимать это сообщение?
«Итак, патч в формате unified diff (должен применяться к файлу wp-includes/class-phpmailer.php»
Просто скопировать этот файл в директорию с файлом class-phpmailer.php ? Или как-то нужно выполнять команду diff? Запутался.
Пожалуйста, объясни. Буду очень признателен.