PHP, SMTP - тема в электронном письме показывает международные символы как HTML_Entities - PullRequest
3 голосов
/ 18 января 2011

Я потратил на это более полдня - просто пытаюсь заставить тему электронной почты выглядеть нормально.Но международные символы отображаются как HTML_Entities, когда электронное письмо попадает в папку входящих сообщений.

Например: Tydzień o Jedność

Отображается как: Tydzień o Jedność

Я уже кодирую письмоТема для UTF-8:

$this->subject = "=?UTF-8?B?" . base64_encode($this->subject) . "?=";

Когда я получаю электронное письмо (Gmail), заголовок выглядит так:

Subject: =?UTF-8?B?VHlkemllJiMzMjQ7IG8gSmVkbm8mIzM0NzsmIzI2Mzs=?=

Так что, похоже, правильно закодировать.Но по какой-то причине в Gmail все еще отображается тема с HTML_Entities.

Есть идеи?

См. Код: SMTP-класс почты

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Если бы это был я, я бы закодировал строку с

$this->subject = mb_encode_mimeheader($this->subject);

Используя ваш пример строки Tydzień o Jedność, это даст кодированный вывод

=?UTF-8?B?VHlkemllw4XChCBvIEplZG5vw4XCm8OEwoc=?=

Заголовок темыВы задали в своем вопросе декодирование для включения сущностей HTML:

echo mb_decode_mimeheader('=?UTF-8?B?VHlkemllJiMzMjQ7IG8gSmVkbm8mIzM0NzsmIzI2Mzs=?=');

дает строку Tydzień o Jedność.Предположительно, строка была закодирована в HTML до того, как была закодирована в base64.

2 голосов
/ 18 января 2011

Является ли $this->subject допустимой строкой UTF-8?Вы работаете с файлами .php в кодировке UTF-8 (без спецификации)?

Кроме того, попробуйте выполнить:

1 голос
/ 18 января 2011

Если у вас есть iconv, вы можете попробовать использовать функцию iconv_mime_encode () вместо "=?UTF-8?B?" . base64_encode($this->subject) . "?=";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...