Как исправить кракозябры в письмах на кириллице в OctoberCMS 4.0.2

Решение проблемы с кракозябрами в письмах OctoberCMS 4.0.2

Проблема

Если вы используете OctoberCMS 4.0.2 и отправляете email-сообщения на кириллице, то при наличии HTML-разметки в теле письма может возникнуть проблема: вместо читаемого текста получатель видит кракозябры (неправильная кодировка).

Это связано с тем, что HTML содержимое неправильно парсится и сохраняется в DOMDocument без нужной конвертации в UTF-8.

Причина

В библиотеке ParsedownExtra, которую использует OctoberCMS для обработки Markdown, отсутствует явное указание на кодировку при загрузке HTML. Это происходит в файле:

vendor/october/rain/src/Parse/Parsedown/ParsedownExtra.php

Строка, вызывающая проблему:

$DOMDocument->loadHTML($elementMarkup);

Решение

Необходимо заменить строку 630 на следующую:

$DOMDocument->loadHTML(mb_convert_encoding($elementMarkup, 'HTML-ENTITIES', 'UTF-8'));

Таким образом, перед загрузкой HTML будет выполнена корректная конвертация кодировки, и письма на кириллице будут отображаться корректно.

К слову, это же решение предлагается на StackOverflow — даже в строке 629 исходного файла есть соответствующий комментарий, но, по какой-то причине, само преобразование не применяется.

Совет

Если вы не хотите редактировать файлы в vendor/, создайте собственную обёртку или форк ParsedownExtra и подключите её через ServiceProvider. Но для быстрой отладки — правка одной строки даёт мгновенный эффект.

PR в либу Октября уже отправлен. Ждём одобрения. На связи.

Можно ещё почитать:
Loading...
Пожалуйста ждите...