Florian Herlings, freier Webentwickler aus Düsseldorf.

Die "filter_*"-Funktionen in PHP

Den Löwen-Anteil der Programmier-Arbeit in PHP verbringt man wohl damit, Nutzereingaben zu filtern und zu validieren. Da dies eine relativ schwierige Aufgabe ist, sind um dieses Thema herum viele Bibliotheken und Frameworks entstanden.

Die meisten Programmierer benutzen entweder ein schwer gewichtiges Framework (wie das Zend-Framework oder Symfony) oder haben sich über die Jahre hinweg ihre eigene kleine Bibliothek aufgebaut. Im Normalfall ist gegen beide Ansätze nichts einzuwenden. Totzdem kommt es manchmal vor, dass man „mal eben“ etwas validieren muss: Sei es weil man das historische gewachsene Skript um eine kleine Funktionalität erweitern muss, oder weil das Projekt an dem man gerade arbeitet einfach zu klein ist um ein aufwändiges durch Datenbank und Framework unterstütztes System zu werden.

Genau für diese Anwendungsfälle gibt es seit PHP 5.2 die brandneuen “filter_*“-Funktionen: Mit diesen kann man auf der einen Seite validieren, ob eine Eingabe bestimmten Vorgaben genügt und auf der anderen Seite unerwünschte Daten aus Datensätzen entfernen.

Validierung

Nehmen wir einmal an, wir möchten prüfen, ob eine Variable ($email) eine gültige E-Mail-Adresse beinhaltet.

Validierung einer E-Mail-Adresse mittels regulärem Ausdruck

Der übliche Weg ist wohl, bei google nach dem regulären Ausdruck für E-Mail-Adresse zu suchen (oder ihn aus seinen Snippets zu kopieren) und mit der PHP-Funktion eregi zu prüfen ob die E-Mail-Adresse dem regulären Ausdruck entspricht.

if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email)) { 
  echo $email.' ist eine gültige E-Mail-Adresse';
}

Obwohl dieser Code technisch gesehen keine Probleme verursacht, beinhaltet er jedoch ein paar Probleme:

Validierung einer E-Mail-Adresse über die "filter_var"-Funktion

Die neuen “filter_*“-Funktionen machen es einem sehr leicht, die Validierung (zum Beispiel einer E-Mail-Adresse) durchzuführen. Hierzu muss man lediglich die Funktion “filter_var“ bemühen. Der Funktion werden zwei Parameter übergeben: die zu validierende Variable und eine Konstante, die angibt nach welchem Schema validiert werden soll. Die Validierung einer E-Mail-Adresse sieht dann wie folgt aus:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    echo $email.' ist eine gültige E-Mail-Adresse';
}

Andere Validierungs-Optionen

Anstelle der Konstante FILTER_VALIDATE_EMAIL lassen sich weitere Konstanten übergeben, mit denen man Variablen validieren kann. Die Namen sind selbsterklärend:

Die Liste lässt sich auch auf der folgenden Seite einsehen: http://www.php.net/manual/en/filter.filters.validate.php

Bereinigen

Neben dem Validieren von Eingaben erlauben die „filter_*“-Funktionen auch das Bereinigen von Variablen: Nehmen wir an wir möchten verhindern dass ein String HTML-Tags enthält. Um dies zu erreichen ersetzen wir die Konstante FILTER_VALIDATE_EMAIL durch FILTER_SANITIZE_STRING:

$input = '<h1>Test</h1>';
$output = filter_var($input, FILTER_SANITIZE_STRING);
echo $output; //Gibt "Test" aus
Auch hier stehen uns verschiedene Möglichkeiten zur Verfügung, die man auf dieser Seite nachsehen kann http://www.php.net/manual/en/filter.filters.sanitize.php.

Weitere Informationen

PHP bietet uns also die Möglichkeit schnell, einfach und ohne unnötigen Framework- oder Bibliothek-Ballast Variablen zu validieren und filtern. Weitere Informationen zu den “filter_*“-Funktionen findet man unter der zugehörigen Seite auf PHP.net.

Lerne mehr auf CodeScouts.de