Символы замены Unicode в функции PHP htmlspecialchars

В функции htmlspecialchars, если вы установите флаг ENT_SUBSTITUTE, он должен заменить некоторые недопустимые символы.

Какие символы заменены? И каково соответствие между недопустимыми символами и теми, которые используются для его замены?

1 ответ

Решение

Существует только один универсальный символ замены: U+FFFD. Если вы записываете UTF-8, то эта кодовая точка соответствующим образом кодируется. Если нет, вы получите соответствующую ссылку на символ � вместо.

Обратимых карт нет. По определению исходная последовательность байтов была недействительной, то есть не имеет значения (valid = имеет значение).

Замененные байты (не совсем "символы") - это недопустимые байты в предполагаемой исходной кодировке. Например, если ваша исходная кодировка была UTF-16 и у вас был одинокий суррогат, это было бы "недопустимо" (хотя технически любой текстовый процессор должен был бы фатально прервать работу в такой ситуации). В качестве лучшего примера, если исходная кодировка ASCII, то любое значение выше 127 является недопустимым символом.

Другие вопросы по тегам