Декодирование символов Windows-1252 в строке темы imap в UTF-8

У меня есть веб-сайт, который позволит людям публиковать на нем что-либо, используя тему письма в Outlook. Используя PHP и imap, я получаю строку темы текста и сохраняю ее в базе данных mysql. Но время от времени кто-то копирует текст с веб-сайта в строку темы этого письма, и я получаю искаженный текст. Похоже на это:

=? Windows-1252? Q? _Every_day_in_our_offices_we_recycle_cardboard,алюминий? =
=? Windows-1252? Q?
= 96_won = 92t_you_join_us = 3F? =

Я попытался декодировать этот текст, чтобы он выглядел нормально на странице, используя следующий код:

$subject = strip_tags($mailHeader->subject);
$header = imap_mime_header_decode($subject);
$subject = "";
for($i=0;$i<count($header);$i++)
{
$subject .= $header[$i]->text;
}

Когда я закончу, я избавлюсь от большей части искаженного текста, но у меня останутся замещающие символы для тире и фигурные кавычки, которые были в исходном тексте строки темы. Смотрите результат ниже:

Каждый день в наших офисах мы перерабатываем картон, алюминий, не присоединитесь ли вы к нам?

Кодировка сайта настроена на UTF-8. Когда я устанавливаю кодировку веб-сайта на ISO-8859-1, заменяющие символы заменяются фигурной кавычкой и тире, что здорово, но я хочу оставить кодировку веб-сайта на UTF-8.

Любая помощь в том, как избавиться от заменяющих символов, не меняя кодировку на ISO-8859-1, была бы полезна. Благодарю.

0

Решение

Каждый из объектов, возвращаемых imap_mime_header_decode включает в себя charset свойство, которое вы игнорируете. Вам нужно будет преобразовать каждый из них в UTF-8 в вашем цикле, используя что-то вроде:

$subject .= mb_convert_encoding($header[$i]->text, "UTF-8", $header[$i]->charset);

В качестве альтернативы рассмотрите возможность использования mb_decode_mimeheader или же iconv_mime_decode_headers функции. Обе эти функции выполняют всю работу по декодированию MIME-заголовка для вас, возвращая строку во внутренней кодировке PHP (обычно это UTF-8).

0

Другие решения

Код выше работает за исключением одного небольшого изменения до самого конца:

$subject .= mb_convert_encoding($header[$i]->text, "UTF-8", $header[$i]->charset);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector