Не все двоичные данные действительны в формате 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 - header-bits) == '.'
Как указывает цитируемый текст, C0 AE не является допустимой последовательностью октетов UTF8, поэтому mb_convert_encoding
удалил бы ее из строки (или перевел бы ее на '.'
, или что-то еще: -).