我正在使用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;
}