Почему вызов mb_convert_encoding для очистки текста?

T R o u B L e.

6
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Не все двоичные данные допустимы для UTF8. Вызов mb_convert_encoding с одинаковыми кодировками from / to - это простой способ убедиться, что вы имеете дело с правильно закодированной строкой для данной кодировки.

Способ использования пропусков проверки UTF8 описан в раздел 6 (соображения безопасности) в rfc2279 :

Другим примером может быть синтаксический анализатор, запрещает последовательность октетов 2F 2E 2E 2F ("/../"), но разрешает недопустимая последовательность октетов 2F C0 AE 2E 2F.

Это можно легче понять, исследуя двоичное представление:

110xxxxx 10xxxxxx # header bits used by the encoding
11000000 10101110 # C0 AE
         00101110 #    2E the '.' character

Другими словами: (C0 AE - биты заголовка) == '.'

Как указано в цитируемом тексте, C0 AE не является допустимой последовательностью октетов UTF8, поэтому mb_convert_encoding удалил бы ее из строки (или перевел бы в '.' или что-то еще : -).

7
ответ дан 11 December 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: