Конвертировать тело письма в UTF-8 - PullRequest
3 голосов
/ 25 февраля 2012

У меня есть строка "test+=EC=B9=E8=F8=BE=FD=E1=ED=E9+test", это тело письма, полученное с помощью imap_fetchbody().Я хочу преобразовать его в правильную строку UTF-8 "test+ěščřžýáíé+test".Я пробовал функции imap_utf7_decode, imap_8bit, base64_decode, quoted_printable_decode безуспешно.Можете ли вы порекомендовать мне функцию, которая преобразует указанную строку в UTF-8?

Я использую iconv_mime_decode($str, 0, "UTF-8"); для заголовков почты, но она не работает для тела письма.

Спасибо

Ответ есть в комментариях принятого ответа!

1 Ответ

3 голосов
/ 25 февраля 2012

Ваша строка ввода выглядит как ISO-8859-2, поэтому вы можете использовать эту функцию, которую я адаптировал из комментариев в документации PHP .

function decode_qprint($str) {
    $str = preg_replace("/\=([A-F][A-F0-9])/", "%$1", $str);
    $str = urldecode($str);
    $str = iconv("ISO-8859-2", "UTF-8", $str);
    return $str;
}

Редактировать: Обновлена ​​функция по комментариям:

function decode_qprint($str) {
    $str = quoted_printable_decode($str);
    $str = iconv('ISO-8859-2', 'UTF-8', $str);
    return $str;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...