@SergioCoder

Как исправить нечитаемое имя отправителя и получателя почтового сообщения?

В PHP скрипте (на Yii2) с помощью расширения webklex/php-imap устанавливаю соединение с почтовым сервером по протоколу IMAP и получаю данные почтовых сообщений.
Необходимо получить отдельно «чистый» e-mail адрес типа: «mymail@mail.ru» и отдельно имена получателя и отправителя типа: «Василий Пупкин» (если они содержатся в e-mail адресе).
При выполнении
$message->getFrom()[0]->personal;
получаю такой результат: ?utf-8?B?0KnQtdC/0LAg0KHQзtdGA0LPQtdC5?=
По идее это (в атрибуте personal) должно быть имя отправителя, написанное кириллицей. Если кодировка utf-8, как указано в начале этой строки, то почему имя не читается? Как «вытащить» из этой строки читаемое имя кириллицей, желательно в кодировке utf-8, т.к. потом его нужно будет записать в базу данных, а потом показать на HTML-странице, написанной в кодировке utf-8?
Аналогично и с именем получателя.
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
?utf-8? - исходная строка была в кодировке UTF-8.
?B? - закодировано в Base64.
0KnQtdC/0LAg0KHQзtdGA0LPQtdC5 - сама строка в Base64.
print base64_decode('0KnQtdC/0LAg0KHQзtdGA0LPQtdC5'); // Щепа Сергей

Кроме Base64 может встретиться кодировка Quoted-printable, обозначаемая как ?Q?. В этом случае заголовок будет выглядеть как
?utf-8?Q?=D0=A9=D0=B5=D0=BF=D0=B0 =D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9?=

Ну и кодировка исходной строки может быть любая. Для перекодирования можно использовать iconv().
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы