Wprowadzenie

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ę.

Czym jest filtr?

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.

Basic usage of filters

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 ("):

$htmlEntities = new Zend_Filter_HtmlEntities();

echo $htmlEntities->filter('&'); // &
echo $htmlEntities->filter('"'); // "

            

Użycie statycznej metody get()

Jeśli niewygodne jest ładowanie danej klasy filtra i tworzenie instancji filtra, możesz użyć statycznej metody Zend_Filter::get() jako alternatywnego sposobu wywołania. Pierwszym argumentem tej metody są dane wejściowe, które chcesz przekazać do metody filter(). Drugi argument jest łańcuchem znaków, który odpowiada, bazowej nazwie klasy filtra, relatywnie do przestrzeni nazw Zend_Filter. Metoda get() automatycznie ładuje klasę, tworzy instancję i wywołuje metodę filter() na danych wejściowych.

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

            

Możesz także przekazać tablicę argumentów konstruktora, jeśli są one potrzebne w klasie filtra.

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

            

Użycie statyczne może być wygodne dla jednorazowego wywołania filtra, ale jeśli musisz wywołać filtr dla większej ilości danych, bardziej efektywne jest wykorzystanie rozwiązania pokazanego w pierwszym przykładzie, czyli utworzenie instancji obiektu filtra i wywołanie metody filter().

Dodatkowo klasa Zend_Filter_Input pozwala na utworzenie instancji i wywołanie większej ilości klas filtrów i weryfikatorów w celu przetworzenia zestawu danych wejściowych. Zobacz „Zend_Filter_Input”.