Signatur
Beschreibung
filter_var_array() ermöglicht es, mehrere Einträge eines assoziativen Arrays auf einmal zu validieren oder zu bereinigen, ohne jeden Wert einzeln durch filter_var() schicken zu müssen. Das ist besonders nützlich, wenn Formulardaten ($_POST, $_GET) oder andere Eingabequellen gesammelt gefiltert werden sollen.
Der Parameter $options kann entweder eine einzelne FILTER_*-Konstante sein, die dann auf alle Schlüssel angewendet wird, oder ein assoziatives Array, dessen Schlüssel den zu filternden Array-Schlüsseln entsprechen. Jeder Eintrag in diesem Definitions-Array kann ein einfacher Filter-Integer oder ein Array mit den Schlüsseln filter, flags und options sein.
Ist $add_empty auf true gesetzt (Standard), werden Schlüssel, die im Eingabe-Array fehlen, aber in $options definiert sind, mit dem Wert null in das Ergebnis-Array aufgenommen. Setzt man es auf false, werden fehlende Schlüssel im Rückgabe-Array weggelassen.
Die Funktion ist besonders hilfreich bei der Verarbeitung von HTTP-Eingaben, da sie Sicherheits- und Validierungslogik kompakt und übersichtlich zusammenfasst. Für einzelne Variablen steht filter_var() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $array Pflicht | array | Das Eingabe-Array, dessen Werte gefiltert werden sollen. Typischerweise ein assoziatives Array wie $_POST oder $_GET. |
|
| $options | array|int | FILTER_DEFAULT | Entweder eine einzelne FILTER_*-Konstante, die auf alle Werte angewendet wird, oder ein assoziatives Array mit Filterdefinitionen je Schlüssel. Jede Definition kann eine Konstante oder ein Array mit filter, flags und options sein. |
| $add_empty | bool | true | Wenn true, werden im Eingabe-Array fehlende, aber in $options definierte Schlüssel mit null ins Ergebnis aufgenommen. Bei false werden sie weggelassen. |
Rückgabewert
false für diesen Schlüssel. Im Fehlerfall (z. B. ungültiger Filter) wird false zurückgegeben.Beispiele
Formulardaten auf einmal validieren und bereinigen
<?php
$formData = [
'username' => ' Alice123 ',
'age' => '28',
'email' => 'alice@example.com',
'website' => 'https://alice.example.com',
'score' => '9.5',
];
$filters = [
'username' => [
'filter' => FILTER_SANITIZE_SPECIAL_CHARS,
],
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 1, 'max_range' => 120],
],
'email' => FILTER_VALIDATE_EMAIL,
'website' => FILTER_VALIDATE_URL,
'score' => [
'filter' => FILTER_VALIDATE_FLOAT,
'flags' => FILTER_FLAG_ALLOW_FRACTION,
],
];
$result = filter_var_array($formData, $filters);
var_export($result);
Fehlende und ungültige Felder erkennen
<?php
$input = [
'email' => 'kein-gueltiges-email',
'age' => '200',
// 'website' fehlt absichtlich
];
$filters = [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 1, 'max_range' => 120],
],
'website' => FILTER_VALIDATE_URL,
];
$result = filter_var_array($input, $filters, add_empty: true);
foreach ($result as $key => $value) {
if ($value === false) {
echo "'$key' ist ungültig.\n";
} elseif ($value === null) {
echo "'$key' fehlt im Eingabe-Array.\n";
} else {
echo "'$key' ist gültig: $value\n";
}
}
// Wichtig · Fallstricke
Sicherheitshinweis: filter_var_array() ist kein vollständiger Schutz gegen alle Arten von Eingabe-Manipulation. Validierungsfilter (z. B. FILTER_VALIDATE_EMAIL) prüfen nur das Format, nicht die Existenz oder Sicherheit des Wertes. Bereinigungsfilter (Sanitize) entfernen oder kodieren potenziell gefährliche Zeichen, ersetzen aber keine kontextspezifische Ausgabekodierung (z. B. htmlspecialchars() für HTML-Ausgabe).
Bei Verwendung von FILTER_CALLBACK kann eine eigene Callback-Funktion als Filter eingesetzt werden – dabei sollte die Callback-Funktion selbst sicher implementiert sein.
Zu beachten: Wenn ein Schlüssel im $array vorhanden ist, aber kein entsprechender Filtereintrag in $options existiert, wird dieser Schlüssel nicht in das Ergebnis übernommen. Das Ergebnis enthält also nur die in $options definierten Schlüssel.