Ответ 1
Не все двоичные данные действительны UTF8. Вызов mb_convert_encoding
с тем же из/в кодирование - это простой способ убедиться, что он имеет дело с правильно кодированной строкой для данной кодировки.
Способ использования пропусков проверки 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
удалит ее из строки (или переведет ее на '.'
или что-то еще: -).