In PHP gibt es seit 5.1 die Filter-Erweiterungen (siehe http://www.php.net/manual/en/ref.filter.php ). Diese können, falls nicht vorhanden, über den PECL-Installer nachinstalliert werden:
$ pecl install pecl/filter
Zum Nachsehen, ob die Filter aktiv sind, entweder per PHP-INFO();

oder einfach per PHP-Programm überprüfen:
if (function_exists('filter_list'))
{
// filter-Erweiterung ist vorhanden
}
else
{
die('Abbruch: Filter-Erweiterung ist nicht vorhanden');
}
VALIDATE zum Testen, ob die Daten exakt dem Format entsprechen, das man erwartet. Die Filter werden dann mit FILTER_VALIDATE_* angesprochen.
SANITIZE zum „Heilen“ der Benutzereingaben. Dies kann, muss aber nicht zum gewünschten Ergebnis führen. Siehe dazu später das Beispiel mit E-Mail-Adressen. Die Filter werden mit FILTER_SANITIZE_* angesprochen.
FLAGS für weitere Optionen, die bei den Filtern gesetzt werden können. Diese werden mit FILTER_FLAG_* angesprochen.
Soll nun ein Eingabe überprüft werden, ob es sich um eine korrekte E-Mail-Adresse handelt, sieht der Aufbau folgend aus:
$mail = 'hier123asdiowqr.de';
$test_mail = filter_var($mail, FILTER_VALIDATE_EMAIL);
if ($test_mail === false)
{
echo "ist keine E-Mail-Adresse";
}
else
{
echo "formal korrekte E-Mail-Adresse.";
}
Bei der Überprüfung durch den Filter filter_var wird TRUE bzw. FALSE gesetzt, je nachdem, ob der formale Aufbau einer E-Mail-Adresse entspricht oder nicht.
Aufgabe: was passiert, wenn E-Mail-Adressen mit Umlauten auftauchen?
Oft ist der erste Schritt zu überprüfen, ob der Typ der eingegebenen Variablen dem vorgegebenen Format entspricht. Wenn ich eine Eingabe von Ganzzahlen erwarte (sprich Integer) und irgendwas anderes kommt, dann ist das schlecht.
$zumtesten = 23423.23;
$testergebnis = filter_var($zumtesten, FILTER_VALIDATE_INT);
if ($testergebnis === false)
{
// invalide
echo "Typ entspricht NICHT dem erwarteten";
}
else
{
// valid
echo "Typ korrekt";
}
Das Ganze für Zahlen mit Nachkommastellen:
$zumtesten = 23423.23;
$testergebnis = filter_var($zumtesten, FILTER_VALIDATE_FLOAT);
if ($testergebnis === false)
{
// invalide
echo "Typ entspricht NICHT dem erwarteten";
}
else
{
// valid
echo "Typ korrekt";
}
$zumtesten = true;
$testergebnis = filter_var($zumtesten, FILTER_VALIDATE_BOOLEAN);
if ($testergebnis === false)
{
// invalide
echo "Typ entspricht NICHT dem erwarteten";
}
else
{
// valid
echo "Typ korrekt";
}
$zumtesten = "http://www.php-kurs.com";
$testergebnis = filter_var($zumtesten, FILTER_VALIDATE_URL);
if ($testergebnis === false)
{
// invalide
echo "Typ entspricht NICHT dem erwarteten";
}
else
{
// valid
echo "Typ korrekt";
}
und wer sich alle vorhandenen Filter ansehen möchte:
echo "<pre>"; $filters = filter_list(); print_r ( $filters );
Benutzereingaben kommen über ein Formular per $_GET herein – im folgenden Beispiel die id:
$testergebnis = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
Durch das Heilen können Strings bereinigt werden – für einige Aufgaben sehr praktisch:
Der Aufbau ist fast identisch zu oben:
$geheilt = filter_var($zumtesten, FILTER_SANITIZE_art);
Über die Flags können den Filter weitere Optionen mitgegeben werden. Die meisten Flags arbeiten nur mit einem bestimmten validate/sanitize zusammen.
Beispiel für die Erweiterung FILTER_FLAG_ALLOW_HEX, die hexadezimale Eingaben zulässt. Damit lässt sich z.B. überprüfen, ob ein Farbwert eingegeben wurde. Dieses Flag arbeitet nur mit dem FILTER_VALIDATE_INT bzw. FILTER_SANITIZE_ NUMBER_INT zusammen.
$eingabe = "ff00e8";
$hexadezimal = filter_var($eingabe,
FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_ALLOW_HEX);
Hier verschiedene Flags (in Klammern, mit was diese zusammenarbeiten)