Символы замены Unicode в функции PHP htmlspecialchars
В функции htmlspecialchars, если вы установите флаг ENT_SUBSTITUTE, он должен заменить некоторые недопустимые символы.
Какие символы заменены? И каково соответствие между недопустимыми символами и теми, которые используются для его замены?
1 ответ
Существует только один универсальный символ замены: U+FFFD. Если вы записываете UTF-8, то эта кодовая точка соответствующим образом кодируется. Если нет, вы получите соответствующую ссылку на символ �
вместо.
Обратимых карт нет. По определению исходная последовательность байтов была недействительной, то есть не имеет значения (valid = имеет значение).
Замененные байты (не совсем "символы") - это недопустимые байты в предполагаемой исходной кодировке. Например, если ваша исходная кодировка была UTF-16 и у вас был одинокий суррогат, это было бы "недопустимо" (хотя технически любой текстовый процессор должен был бы фатально прервать работу в такой ситуации). В качестве лучшего примера, если исходная кодировка ASCII, то любое значение выше 127 является недопустимым символом.