Я заметил следующее поведение при работе с htmlspecialchars
в php версии 7.0.3:
php > echo htmlspecialchars('"');
"
php > echo htmlspecialchars('"', ENT_SUBSTITUTE);
"php > echo htmlspecialchars('"', ENT_QUOTES | ENT_SUBSTITUTE);
"
Мы хотели бы избежать двойных кавычек, также используя ENT_SUBSTITUTE
флаг. Обратите внимание, что двойная кавычка не экранируется при использовании только ENT_SUBSTITUTE
флаг.
Это ENT_QUOTES
флаг требуется с ENT_SUBSTITUTE
если мы хотим избежать двойных кавычек? Почему это?
документация для htmlspecialchars не говорит, что ENT_QUOTES
требуется при использовании ENT_SUBSTITUTE
, На самом деле, это, кажется, предполагает обратное — двойные кавычки всегда следует избегать, если только ENT_NOQUOTES
флаг присутствует.
ENT_COMPAT | ENT_HTML401
это дефолт значение для $flags
параметр. Когда вы проходите ENT_SUBSTITUTE
вместо, вы переопределяете значение по умолчанию. Сейчас не применяется ENT_COMPAT
больше, который отвечает за цитаты. Если хотите добавлять ENT_SUBSTITUTE
к параметрам по умолчанию вы должны правильно написать:
htmlspecialchars('"', ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE)
Когда вы явно передаете флаги htmlspecialchars
, вы заменить флаги по умолчанию.
htmlspecialchars($data)
эквивалентно htmlspecialchars($data, ENT_COMPAT | ENT_HTML401)
htmlspecialchars($data, ENT_SUBSTITUTE)
отбрасывает правила из ENT_COMPAT
а также ENT_HTML401
в просто использовать правила из ENT_SUBSTITUTE
,
(А также ENT_COMPAT
приводит к конвертации двойных кавычек).