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


Reading an email's subject in Unicode out of an IMAP server

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

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

问题是它是编码出来的:

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

我可以在Zend_Mail类中找到编码函数命名为_encodeHeader,但我找不到解码对!有人知道怎么解码这个字符串吗?

这是编码器函数:

protected function _encodeHeader($value)
{
    if (Zend_Mime::isPrintable($value) === false) {
        if ($this->getHeaderEncoding() === Zend_Mime::ENCODING_QUOTEDPRINTABLE) {
            $value = Zend_Mime::encodeQuotedPrintableHeader($value, $this->getCharset(), Zend_Mime::LINELENGTH, Zend_Mime::LINEEND);
        } else {
            $value = Zend_Mime::encodeBase64Header($value, $this->getCharset(), Zend_Mime::LINELENGTH, Zend_Mime::LINEEND);
        }
    }
    return $value;
}

搜索"RFC2047解码器",并选择一个现有的库。

我是这样解决的:

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;
}