Как исправить «imap_utf8» не работает для тела письма в php imap

Я создал php-код для получения всех новых писем из gmail с помощью imap — тоже на иврите. Когда я пытаюсь использовать функцию "imap_utf8", она работает только для темы, а не для тела. (Также заметил, что у темы другая кодировка, чем у тела)

Я много искал в Интернете, и я не нашел никакого решения. (я тоже новичок в php)

foreach($emails as $email_number) {
        $overview = imap_fetch_overview($inbox,$email_number,0);
        $message = imap_fetchbody($inbox,$email_number, 1);

        echo imap_utf8($overview[0]->subject);
        echo imap_utf8($message);
}

Ожидаю вывод иврита для темы и тела, но работает только тема.

например, если подлежащее "נושא", а тело "גוף", то результат будет таким: "נושא" за тему (И это здорово), 15LXldejDQo= для тела

(И закодированный код темы =?UTF-8?B?16DXldep15A=?=)

Спасибо!

P.S. Извините, если мой английский не очень хорош.

Является ли сообщение A MIME encoded string? Строка темы в электронном письме определенно относится к случаю особый. См.: iconv_mime_decode

ficuscr 23.05.2019 20:43

О: Большое спасибо за быстрый ответ. B: iconv_mime_decode работал только для темы, но не для тела.

Aviad 23.05.2019 20:52

Думаю, я запутался... 15LXldejDQo= мне кажется, что גוף, только в кодировке base64. Если вы ищете хорошее чтение... tools.ietf.org/html/rfc2045

ficuscr 23.05.2019 20:59

Как преобразовать его в utf8 с помощью php?

Aviad 23.05.2019 21:01

Нечего конвертировать. Думаю просто base64_decode это. Декодирует данные, закодированные с помощью MIME base64.

ficuscr 23.05.2019 21:04

Отлично работает!!!!!!!!!! Большое спасибо!!!!!!!!!!!!!!!!!!!

Aviad 23.05.2019 21:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
1 797
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эти две функции немного отличаются.

  • base64_decode — декодирует данные, закодированные с помощью MIME base64
  • imap_utf8 — Преобразует текст в кодировке MIME в UTF-8.

Если вы когда-либо читали только один RFC, то лучше рассмотреть Многоцелевые расширения почты Интернета.

<?php
$body = '15LXldejDQo=';

var_dump(base64_decode($body)); //output: גוף
var_dump(imap_utf8($body));     //output: 15LXldejDQo=

$subject = '=?UTF-8?B?16DXldep15A=?=';
var_dump(base64_decode($subject));  //output: Q1|^�^W^�^@
var_dump(imap_utf8($subject));      //output: נושא

В основном кодирование заголовка использует другую технику. Вы видите это в теме письма... =?charset?encoding?encoded-text?=. B для base64, Q будет перед кавычками для печати. Сообщение просто закодировано в base64, тип контента определяется заголовком Content-Type.

Другие вопросы по теме