簡體   English   中英

從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?=

我可以在名為_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM