Komponent Zend_Filter zapewnia zestaw najczęściej potrzebnych filtrów danych. Zapewnia też prosty mechanizm łańcuchowego wywoływania filtrów, dzięki ktoremu wiele filtrów może być dodanych do jednej danej w kolejności zdefiniowanej przez programistę.
W fizycznym świecie, filtr najczęściej jest używany do usuwania niechcianych części danych wejściowych, a żądana część danych wejściowych przechodzi przez filtr jako dane wyjściowe (np. kawa). W takim scenariuszu filtr jest operatorem który tworzy podzbiór danych wejściowych. Ten typ filtrowania jest użyteczny w aplikacjach web - usuwanie niedozwolonych danych wejściowych, usuwanie niepotrzebnych białych znaków itp.
Ta podstawowa definicja filtra może być rozszerzona, aby zawierała
uogólnione transformacje na danych wejściowych. Pospolitą transformacją
stosowaną w aplikacjach web jest zabezpieczanie przed encjami HTML.
Na przykład, jeśli pole formularza jest automatycznie wypełniane
niefiltrowanymi danymi wejściowymi (np., z przeglądarki internetowej),
ta wartość nie może zawierać encji HTML lub posiadać jedynie
zabezpieczone encje HTML, w celu zapobiegania niechcianemu zachowaniu
aplikacji oraz słabym punktom bezpieczeństwa. Aby sprostać tym
wymaganiom, encje HTML, ktore znajdują się w danych wejściowych muszą
być usunięte lub zabezpieczone. Oczywiście to, ktore podejście jest
bardziej odpowiednie zależy od sytuacji. Filtr, który usuwa encje HTML
działa w kontekście pierwszej definicji filtra - operator który tworzy
podzbiór danych wejściowych. Filtr, ktory zabezpiecza encje HTML
natomiast przekształca dane wejściowe (np. znak "&
"
jest zamieniany na "&
"). Wspieranie programistów
przy takich przypadkach użycia jest ważne, i "filtrowanie" w kontekście
użycia Zend_Filter oznacza przeprowadzanie pewnych transformacji na
danych wejściowych.
Mająć ustaloną w ten sposób definicję filtra, możemy zapewnić podstawę
dla interfejsu Zend_Filter_Interface
, który wymaga
zaimplementowania przez klasę filtra jednej metody nazwanej
filter()
.
Poniżej jest podstawowy przykład użycia filtra na dwóch danych
wyjściowych, na znaku Et (&
) oraz na znaku podwójnego
cudzysłowu ("
):
<?php require_once 'Zend/Filter/HtmlEntities.php'; $htmlEntities = new Zend_Filter_HtmlEntities(); echo $htmlEntities->filter('&'); // & echo $htmlEntities->filter('"'); // "
If it's inconvenient to load a given filter class and create an
instance of the filter, you can use the static method
Zend_Filter::get()
as an alternative invocation style.
The first argument of this method is a data input value, that you
would pass to the filter()
method. The second
argument is a string, which corresponds to the basename of the
filter class, relative to the Zend_Filter namespace. The
get()
method automatically loads the class, creates an
instance, and applies the filter()
method to the data
input.
<?php require_once 'Zend/Filter.php'; echo Zend_Filter::get('&', 'HtmlEntities');
Możesz także przekazać tablicę argumentów konstruktora, jeśli są one potrzebne w klasie filtra.
<?php require_once 'Zend/Filter.php'; echo Zend_Filter::get('"', 'HtmlEntities', array(ENT_QUOTES));
The static usage can be convenient for invoking a filter ad hoc,
but if you have the need to run a filter for multiple inputs,
it's more efficient to follow the first example above,
creating an instance of the filter object and calling its
filter()
method.
Also, the Zend_Filter_Input class allows you to instantiate and run multiple filter and validator classes on demand to process sets of input data. See ???.