Признаки:
Умлауты и другие многобайтовые символы частично заменены на ? в закодированном заголовке Темы (например, ö → =?utf-8?Q?=C3=3F?=), даже если входная строка действительна в формате UTF-8 и объект сообщения содержит правильные данные перед кодированием заголовка.
Среда
- PHP: 8.4.x
- Symfony Mailer: 8.0.3
- Symfony Mime: 8.0.x
- Транспорт: SMTP
- = UTF-8
Код: Выделить всё
mb_internal_encoding() - = UTF-8
Код: Выделить всё
default_charset - = 63 (
Код: Выделить всё
mb_substitute_character())Код: Выделить всё
?
Шестнадцатеричные дампы частей темы перед вызовом $message->subject():
Код: Выделить всё
db heading:
45697365726b756368656e202d2057616666656c68c3b6726e6368656e206d6974205361686e65
"Eiserkuchen - Waffelhörnchen mit Sahne"
piece (heading + emoji):
45697365726b756368656e202d2057616666656c68c3b6726e6368656e206d6974205361686e6520f09f8db420
"... Waffelhörnchen mit Sahne 🍴"
Код: Выделить всё
db heading:
506cc3a4747a6368656e2d52657374652d4b756368656e3a2052657a657074207a757220506cc3a4747a6368656e76657277657274756e67
"Plätzchen-Reste-Kuchen: Rezept zur Plätzchenverwertung"
Код: Выделить всё
subject before set:
45697365726b756368656e202d2057616666656c68c3b6726e6368656e206d6974205361686e6520f09f8db420506cc3a4747a6368656e2d52657374652d4b756368656e3a2052657a657074207a757220506cc3a4747a6368656e76657277657274756e67
Код: Выделить всё
c3 b6Результирующий закодированный заголовок темы
После вызова:
Код: Выделить всё
$message->subject($subject);
Код: Выделить всё
Subject: Eiserkuchen - =?utf-8?Q?Waffelh=C3=3Frnchen?= mit Sahne
=?utf-8?Q?=F0=9F=8D=B4=3FPl=C3=3Ftzchen-Reste-K?=
=?utf-8?Q?uchen=3A?= Rezept zur
=?utf-8?Q?Pl=C3=3Ftzchenverwertuntzchenverwertung?=
- → C3 3F
Код: Выделить всё
C3 B6 - → C3 3F
Код: Выделить всё
C3 A4
Код: Выделить всё
0x80–0xBFНаблюдения
- Объект сообщения содержит правильную кодировку заголовка UTF-8 before.
- показывает тот же поврежденный закодированный заголовок.
Код: Выделить всё
Email::toString() - Увеличена длина строки заголовка () не меняет поведение.
Код: Выделить всё
setMaxLineLength(998) - Принудительное использование RFC-2047 кодировки Base64 (B) вручную работает правильно:
Код: Выделить всё
$encoded = '=?UTF-8?B?' . base64_encode($subject) . '?=';
$headers->remove('Subject');
$headers->addTextHeader('Subject', $encoded);
Известна ли это проблема или регресс в Symfony Mime 8.0.x при Q-кодировании неструктурированных заголовков с помощью многобайтовых символов UTF-8 (особенно эмодзи + умлауты)?
Или мне не хватает необходимой конфигурации/шаблона использования для Email::subject() в Symfony 8?
Прежде чем подавать официальный отчет об ошибке, мы будем признательны за любые рекомендации или подтверждения.
Подробнее здесь: https://stackoverflow.com/questions/798 ... f-during-h
Мобильная версия