Filter

Školení, která pořádám

Jak asi víte, v PHP 6 budou odstraněny konfigurační direktivy magic_quotes, dokonce pro tento krok už i vznikl patch. Nejen jako jejich možná náhrada vzniklo rozšíření Filter.

Základní funkcí tohoto rozšíření je funkce filter_var, která aplikuje daný filtr na předanou hodnotu. Filtrů je celá řada, rozdělit se dají do tří skupin:

Validační filtry
Kontrolují, jestli hodnota splňuje daná kritéria. Pokud ano, tak ji vrátí ve správném typu, jinak vrátí null.
Sanitizační filtry
Odstraňují z hodnoty nežádoucí znaky.
Vlastní filtry
Jsou realizovány uživatelsky definovanými funkcemi.

Kromě ručního filtrování lze pomocí konfigurační direktivy filter.default automaticky filtrovat i všechna data od uživatele. Tato direktiva je podle mě trochu nešťastně přednastavena na filtr „string“, který je obdobou funkce strip_tags. Zpětnou kompatibilitu s magic_quotes_gpc zajistí filtr „magic_quotes“. Ve většině případů nejsem příznivcem odstraňování jakýchkoliv znaků – obvykle by mělo stačit je správně ošetřit, v odůvodněných případech zkontrolovat, jestli je hodnota neobsahuje a uživatele o tom informovat.

Druhou důležitou funkcí je filter_input, která slouží k přístupu k proměnným mimo PHP. Opět je možné jí předat filtr, který má na data aplikovat. Pomocí této funkce lze také získat přístup k originálním datům, pokud na ně byl použit výchozí filtr.

Ve starších verzích tohoto rozšíření se konstanty FILTER_VALIDATE_* jmenovaly FL_*, FILTER_SANITIZE_* FS_* a FILTER_CALLBACK FC_CALLBACK. Změna byla provedena jako součást přípravy na začlenění tohoto rozšíření přímo do PHP.

Vznik tohoto rozšíření vítám, protože poskytuje jednotný přístup ke kontrole, escapování a filtrování dat. S příchodem PHP 6 myslím bude také hojně využíváno pro skripty spoléhající na zapnuté magic_quotes_gpc. Nelíbí se mi kladení důrazu na sanitizační filtry. Na druhou stranu by možná stálo za to vytvořit filtr, který by požral všechno, takže by se k datům od uživatele dalo přistupovat výhradně přes filtry.

Jakub Vrána, Seznámení s oblastí, 26.4.2006, diskuse: 4 (nové: 0)

Diskuse

ikona MiSHAK:

Možná zmizí ma noční můra magických funkcí s mystickým charakterem. Rád si vše ošetřím sám :)

M jako Molitan:

Fajn, clovek si naprogramuje hezky objekt na import promennych , kteremu se posilaji retezece jako 'validate as numeric, not zero' a oni neco podobneho zacleni primo do PHP, takze to za 2 roky budu muset prepisovat... :-)

Je to ale samozrejme fajn, snad PHP 6 nedopadne tak, jako PHP 5. Pouziva vubec nejaky velky projekt (opensource) projekt objekty z PHP 5?

Lampicka:

Prado, Cake apod.

M jako Molitan:

No, myslel jsem neco, co nekdo skutecne pouziva (nekdo = "asi tak miliony uzivatelu"), cili projekty jako Mediawiki, PHPBB, textpattern nebo tak neco.

To, ze nejaky pokrokovy framework pracuje s petkovymi objekty neni moc prekvapeni.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.