при использовании htmlspecialchars для экранирования двойных кавычек зачем нужен ENT_QUOTES при использовании ENT_SUBSTITUTE?

Я заметил следующее поведение при работе с 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 флаг присутствует.

0

Решение

ENT_COMPAT | ENT_HTML401 это дефолт значение для $flags параметр. Когда вы проходите ENT_SUBSTITUTE вместо, вы переопределяете значение по умолчанию. Сейчас не применяется ENT_COMPAT больше, который отвечает за цитаты. Если хотите добавлять ENT_SUBSTITUTE к параметрам по умолчанию вы должны правильно написать:

htmlspecialchars('"', ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE)
2

Другие решения

Когда вы явно передаете флаги htmlspecialchars, вы заменить флаги по умолчанию.

htmlspecialchars($data) эквивалентно htmlspecialchars($data, ENT_COMPAT | ENT_HTML401)

htmlspecialchars($data, ENT_SUBSTITUTE) отбрасывает правила из ENT_COMPAT а также ENT_HTML401 в просто использовать правила из ENT_SUBSTITUTE,

(А также ENT_COMPAT приводит к конвертации двойных кавычек).

2

По вопросам рекламы [email protected]