在输出之前是否必须解码7位和8位编码的消息?

时间:2011-07-27 11:56:10

标签: php encoding imap

7位传输编码和UTF-7之间以及8位和UTF-8之间可能存在什么关系?

将消息体编码手动转换为预期的编码(假设为'utf-8')是否有意义,如下面的代码所示?

 function decodeBody($body, $transferEncoding, $bodyEncoding) {

        switch ($transferEncoding) { 

            case '7BIT' :
            case '8BIT' :   
                                    // any additional decoding here ?
                $body = mb_convert_encoding($body, 'utf-8', $bodyEncoding);
            break;


            case 'BASE64' :
                $body = base64_decode($body);
                $body = mb_convert_encoding($body, 'utf-8', $bodyEncoding);
            break;

            case 'QUOTED_PRINTABLE' :
                $body = quoted_printable_decode($body);
                $body = mb_convert_encoding($body, 'utf-8', $bodyEncoding);
            break;

        }

        return $body;
    }

1 个答案:

答案 0 :(得分:3)

引用RFC1341

值“8bit”,“7bit”和“binary”都表示已执行NO编码... “8bit”表示行很短,但可能有非ASCII字符(设置了高位的八位字节)。

这意味着7bit是纯ascii,你根本不需要将它转换为UTF-8(因此在这种情况下不需要使用mb_convert_encoding())。 '8bit'意味着可能存在非ascii字符,但据我所知,它不一定是UTF-8字符集编码 - 可能是iso-8859-1或其他任何东西。因此AFAIK'8bit'并不意味着自动使用UTF-8。