filter_var против htmlentities против htmlspecialchars

Заявление об ограничении ответственности

Это не вопрос о том, следует ли экранировать ввод данных в базу данных. Это строго связано с техническими различиями между тремя функциями в названии.

В этом вопросе обсуждается разница между _ 1_ и _ 2_. Но на самом деле здесь не обсуждаются filter_var() и информация, которую я найденное в Google, было больше похоже на "Убедитесь, что вы избегаете ввода пользователя, прежде чем он будет отображен эхом!"

Мои вопросы:

  • Почему htmlspecialchars() и htmlentities() обычно используются вместо filter_var()?
  • Есть ли снижение производительности при использовании filter_var()?
  • filter_var() не так безопасен, как два других варианта?
  • Есть ли какая-либо другая причина НЕ использовать следующее для кодирования пользовательского ввода до echod

filter_var($var, FILTER_SANITIZE_FULL_SPECIAL_CHARS);


person Charles Sprayberry    schedule 05.08.2011    source источник
comment
_1 _ / _ 2_ позволяют предотвратить двойное кодирование объектов, установив для четвертого параметра значение false. Я не делаю этого, если это возможно с помощью filter_var.   -  person ryanve    schedule 06.11.2012


Ответы (1)


Я предполагаю (об отсутствии принятия) просто потому, что расширение Filter включено по умолчанию только с версии 5.2, тогда как методы html * существуют дольше.

person Stephen    schedule 05.08.2011
comment
Я подумал, что это будет что-то вроде этого из-за отсутствия усыновлений. Но тогда почему внутренняя группа PHP сочла необходимым создать filter_var, если с html* методами все в порядке? - person Charles Sprayberry; 06.08.2011
comment
Потому что filter_var делает гораздо больше, чем просто экранирование HTML. - person Stephen; 06.08.2011
comment
Хорошо, тогда зачем нужно добавлять эту конкретную функциональность в filter_var()? - person Charles Sprayberry; 06.08.2011
comment
Потому что он позволяет разработчикам использовать один и тот же метод фильтрации с разными аргументами для выполнения различных видов фильтрации и очистки, вместо того, чтобы вызывать разные методы с разными аргументами. - person Stephen; 06.08.2011