如何修复“ imap_utf8”不适用于PHP imap中的电子邮件正文

时间:2019-05-23 18:31:40

标签: php utf-8 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:对不起,我的nglish不太好。

2 个答案:

答案 0 :(得分:1)

最后,感谢ficuscr,它正在运行! 答案是使用base64_decode函数包装正文,如下所示:

$message = imap_fetchbody($inbox,$email_number, 1);
echo base64_decode($message);

非常感谢您,ficuscr

答案 1 :(得分:1)

这两个功能略有不同。

  • base64_decode —解码使用MIME base64
  • 编码的数据
  • imap_utf8 —将MIME编码的文本转换为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: נושא

基本上,标头编码使用另一种技术。您可以在主题行=?charset?encoding?encoded-text?=中看到它。 B用于base64,Q可以用引号打印。消息是简单的base64编码的,内容类型由Content-Type头建立。