如何修复 "imap_utf8" 不适用于 php imap 中的电子邮件正文

How to fix "imap_utf8" doesn't work for the email's body in php imap

我创建了一个 php 代码来使用 imap 从 gmail 获取所有新电子邮件 - 也是希伯来语。当我尝试使用 "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:如果我的英文不是很好,请见谅

这两个函数略有不同。

  • base64_decode — 解码使用 MIME base64
  • 编码的数据
  • imap_utf8 — 将 MIME-encoded 文本转换为 UTF-8

如果您只读过一个 RFC,Multipurpose Internet Mail Extensions 一个是值得考虑的。

<?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: נושא

基本上 header 编码使用不同的技术。您会在主题行中看到这一点... =?charset?encoding?encoded-text?=B 用于 base64,Q 用于 quote-printable。消息只是简单的base64编码,内容类型由Content-Type header.

建立