Главная / Zend Manual Core
Zend_Filter

Введение

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

Что есть фильтр?

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

Это базовое определение фильтра может быть расширено включением общих преобразований ввода. Часто встречающееся в веб-приложениях преобразование - экранирование сущностей HTML (HTML entities). Например, если поле формы автоматически заполняется ненадежными данными (например, данными из веб-броузера), то это значение не должно включать в себя сущности HTML, либо эти сущности должны быть экранированы, для предотвращения нежелательного поведения и угроз безопасности. В соответствии с этими требованиями сущности HTML должны быть удалены или экранированы - выбор подхода зависит от ситуации. Фильтр, который экранирует сущности HTML, тем не менее, преобразовывает ввод (например, "&" преобразовывается в "&"). Поддержка таких случаев использования важна для веб-разработчиков и "фильтрация" в контексте использования Zend_Filter подразумевает выполнение некоторых преобразований над входными данными.

Основы использования фильтров

Такое определение фильтра дает основу для Zend_Filter_Interface, который требует от классов фильтров реализации одного метода с именем filter().

Ниже приведен пример использования фильтра с двумя вариантами входных данных - амперсандом (&) и двойными кавычками (").

  1. $htmlEntities = new Zend_Filter_HtmlEntities();
  2.  
  3. echo $htmlEntities->filter('&'); // &
  4. echo $htmlEntities->filter('"'); // "

Использование статического метода get()

Каждый раз загружать нужный класс фильтра и создавать его экземпляр довольно неудобно, поэтому был создан статический метод Zend_Filter::get(), который можно использовать как альтернативный способ вызова. Первым агрументом этого метода является значение входных данных, которое требуется передать методу filter(). Вторым аргументом является строка, которая соответствует базовому имени класса фильтра относительно пространства имен Zend_Filter. Метод get() автоматически загружает класс, создает его экземпляр и применяет метод filter() к входным данным.

  1. echo Zend_Filter::get('&', 'HtmlEntities');

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

  1. echo Zend_Filter::get('"', 'HtmlEntities', array(ENT_QUOTES));

Использование метода get() может быть удобным для единичного вызова фильтра. Но если нужно пропустить через один и тот же фильтр несколько значений, то более эффективным будет создавать экземпляр фильтра и вызывать его метод filter(), как это было показано в первом примере.

Zend_Filter_Input также позволяет инстанцировать и запускать несколько фильтров и валидаторов для обработки наборов данных. Более подробную информацию читайте в Zend_Filter_Input.


Zend_Filter