Нужно ли декодировать 7-битные и 8-битные сообщения перед выводом? - PullRequest
5 голосов
/ 27 июля 2011

Какова возможная связь между 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 Ответ

3 голосов
/ 08 августа 2011

Ссылаясь на RFC1341 :

Значения "8bit", "7bit" и "binary" подразумевают, что кодирование NO не было выполнено ... "8bit"означает, что строки короткие, но могут быть символы, не входящие в ASCII (октеты с установленным старшим битом).

Это означает, что 7 бит - это чистый ascii, и вам не нужно преобразовыватьэто вообще UTF-8 (поэтому нет необходимости использовать mb_convert_encoding() в этом случае).«8bit» означает, что могут присутствовать символы не ascii, но, насколько я понимаю, это не обязательно должно быть в кодировке кодировки UTF-8 - это может быть iso-8859-1 или что-то еще.Так что AFAIK «8bit» не означает UTF-8 автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...