Не все двоичные данные допустимы для 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
удалил бы ее из строки (или перевел бы в '.'
или что-то еще : -).