Rozdział 11. Zend_Filter

Spis treści

11.1. Wprowadzenie
11.2. Łańcuchy filtrów
11.3. Pisanie filtrów
11.4. Zend_Filter_Input
11.4.1. Wprowadzenie
11.4.2. Opis działania

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

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('&'); // &amp;
echo $htmlEntities->filter('"'); // &quot;