从IMAP服务器读取Unicode中的电子邮件主题

时间:2014-05-04 12:52:34

标签: php email zend-framework imap

我正在使用Zend Framework 1的IMAP服务器连接器,而我正试图从服务器中获取一个主题为Unicode字符的电子邮件。我是这样做的:

$message = $imapServer->getMessage($message_number);
echo $message->getHeader('subject');

问题是它出现了编码:

=?UTF-8?B?2KjYp9uM?=

我可以在名为Zend_Mail的{​​{1}}类中找到编码函数,但我找不到解码对!有谁知道如何解码这个字符串?

这是编码器功能:

_encodeHeader

2 个答案:

答案 0 :(得分:1)

搜索" RFC2047解码器"并选择一个现有的库来做到这一点。如果没有任何东西可用,请自行滚动。

答案 1 :(得分:-1)

以下是我如何解决它:

switch (strtolower($encoding)) {
    case \Zend_Mime::ENCODING_QUOTEDPRINTABLE:
        if (preg_match('/^\s?=\?([^\?]+)\?Q\?/', $str, $matches) === 1) {
            $str = preg_replace('/\s?=\?'.preg_quote($matches[1]).'\?Q\?/', ' ', $str);
            $str = strtr($str, array('?=' => ''));
            $str = trim($str);
        }
        return \Zend_Mime_Decode::decodeQuotedPrintable($str);

    case \Zend_Mime::ENCODING_BASE64:
        return base64_decode($encodedText);

    case \Zend_Mime::ENCODING_7BIT:
    case \Zend_Mime::ENCODING_8BIT:
    default:
        return $encodedText;
}