PHP imap奇怪的编码字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP imap奇怪的编码字符相关的知识,希望对你有一定的参考价值。

我正在使用php来获取我的Gmail电子邮件。它给了我这样的电子邮件标题:

=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?= 

它应该看起来像这样(这些是通常在utf8中提供的拉脱维亚字符):

Darba sākšana ar Gmail

我试过了:

utf8_encode(quoted_printable_decode(
   "=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?="
));

它给了我以下,这是不正确的:

=?ISO-8859-13?Q?Darba_sâkðana_ar_Gmail? 

我如何得到这个 - 开始使用Gmail

答案

你必须使用imap_mime_header_decode函数:

$text = "=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?=";

$elements = imap_mime_header_decode($text);
foreach ($elements as $element) {
    echo "Charset: $element->charset
";
    echo "Text: $element->text

";
}

你可以使用iconv函数转换:

iconv($element->charset, 'utf-8', $element->text);
另一答案

正如Piotr回答的那样,你需要使用imap_mim_header_decode。我假设您正在使用带有fromaddress的imap_headerinfo。这就是我做的:

if (strpos($header->fromaddress,'?=')) {
    $wrong_charset = imap_mime_header_decode($header->fromaddress);

    $corrected_charset = '';

    for ($i=0; $i<count($value); $i++) {
        $corrected_charset .= "{$wrong_charset[$i]->text} ";
    }

}
else{
    $corrected_charset = $header->fromaddress;
}

以上是关于PHP imap奇怪的编码字符的主要内容,如果未能解决你的问题,请参考以下文章

PHP IMAP 解码消息

Imap消息编码问题

AFNetworking 中的奇怪编码行为

php 使用PHP以正确的编码修改HTML片段

PHP IMAP POP 转发脚本发送以某种方式更改的图像附件

记一个奇怪的编码转换问题,及探讨“错误: 编码GBK的不可映射字符” 的原因