[英]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?=
我可以在名為_encodeHeader
Zend_Mail
類中找到編碼功能,但找不到解碼對! 有人知道如何解碼此字符串嗎?
這是編碼器功能:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.