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

问题描述 投票:0回答:2

7bit传输编码和UTF-7、8bit和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;
    }
php encoding imap
2个回答
3
投票

引用RFC1341

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

这意味着 7bit 是纯 ascii,您根本不需要将其转换为 UTF-8(因此在这种情况下无需使用

mb_convert_encoding()
)。 “8bit”意味着可能存在非ascii字符,但据我了解,它不一定是UTF-8字符集编码——可能是iso-8859-1或其他字符。所以据我所知“8bit”并不自动意味着 UTF-8。


0
投票

不,无需解码

根据 RFC 822,原始 SMTP 协议被设计为以 7 位格式(原始 ASCII)传输消息。

因此任何第 8 位设置为 1 的消息都应该以某种方式进行编码。

7 位 意味着完全需要编码。

8 位 表示这是一条 8 位干净的消息,并且 SMTP 服务器没有更改该消息。它不需要在接收端进行解码。 但如果您想使用 SMTP 发送消息,则必须将其编码为“7bit”或“quote-printable”(不使用消息中的第 8 位)

所以你根本不需要这行:

$body = mb_convert_encoding($body, 'utf-8', $bodyEncoding);
© www.soinside.com 2019 - 2024. All rights reserved.