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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我创建了一个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 =?=”)

谢谢!

PS:如果我的英语不是很好,我很抱歉。

提问于
用户回答回答于

这两个功能略有不同。

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

如果您只读过一个RFC 多用途Internet邮件扩展,那么您可以考虑使用它。

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

基本上,头部编码使用不同的技术。您的SAN看到这个主题行...... =?charset?encoding?encoded-text?=。该B是BASE64,一Q会脱颖而出报价打印的。该消息只是base64编码,由Content-Type标头建立的内容类型。

用户回答回答于

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

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

非常感谢你,ficuscr

扫码关注云+社区

领取腾讯云代金券