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;
}
答案 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。