Signatur
Beschreibung
filter_input_array() ermöglicht es, mehrere Eingabevariablen aus einer externen Quelle (z. B. $_GET, $_POST, $_COOKIE) in einem einzigen Aufruf zu lesen und dabei gleichzeitig zu filtern oder zu validieren. Dies erspart das wiederholte Aufrufen von filter_input() für jede einzelne Variable und macht den Code übersichtlicher und robuster.
Der Parameter $type legt die Eingabequelle fest (z. B. INPUT_GET, INPUT_POST). Mit $options kann entweder ein einzelner Filter für alle Variablen oder ein assoziatives Array mit variablenspezifischen Filtern und Flags angegeben werden. So lässt sich jeder Eingabewert individuell behandeln – inklusive Standardwert, Wertebereich-Prüfung oder regulären Ausdrücken.
Ist $add_empty auf true gesetzt (Standard), werden Variablen, die in der Eingabequelle nicht vorhanden sind, mit dem Wert null ins Ergebnis-Array aufgenommen. Das erleichtert die anschließende Prüfung auf fehlende Felder.
Diese Funktion ist besonders bei der Verarbeitung von Formulardaten oder Query-Strings sinnvoll, da sie eine strukturierte, zentrale Bereinigung aller Eingaben an einer einzigen Stelle erlaubt und so das Sicherheitsrisiko durch ungefilterte Nutzereingaben deutlich reduziert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | int | Konstante der Eingabequelle: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER oder INPUT_ENV. |
|
| $options | array|int | FILTER_DEFAULT | Entweder ein einzelner Filter (z. B. FILTER_SANITIZE_SPECIAL_CHARS) für alle Variablen, oder ein assoziatives Array, dessen Schlüssel den Variablennamen entsprechen und dessen Werte Filter-IDs oder Arrays mit filter, flags und options sind. |
| $add_empty | bool | true | Wenn true, werden nicht vorhandene Variablen mit dem Wert null ins Ergebnis-Array eingefügt. Bei false fehlen sie komplett im Rückgabe-Array. |
Rückgabewert
false, wenn die Filtervalidierung fehlschlug, oder null, wenn die Variable in der Eingabequelle nicht vorhanden war (sofern add_empty aktiv ist). Gibt false zurück, wenn der $type ungültig ist, und null, wenn die Eingabequelle serverseitig nicht verfügbar ist.Beispiele
Formulardaten aus $_POST filtern und validieren
<?php
// Angenommene $_POST-Daten:
// $_POST = ['username' => ' Alice ', 'age' => '28', 'email' => 'alice@example.com'];
$definition = [
'username' => [
'filter' => FILTER_SANITIZE_SPECIAL_CHARS,
],
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 1, 'max_range' => 120],
],
'email' => FILTER_VALIDATE_EMAIL,
'website' => [
'filter' => FILTER_VALIDATE_URL,
'flags' => FILTER_NULL_ON_FAILURE,
],
];
$data = filter_input_array(INPUT_POST, $definition);
if ($data !== false && $data !== null) {
var_dump($data['username']); // string 'Alice' (bereinigt)
var_dump($data['age']); // int 28
var_dump($data['email']); // string 'alice@example.com'
var_dump($data['website']); // NULL (nicht übergeben, add_empty=true)
}
GET-Parameter mit einfachem Filter für alle Felder
<?php
// Angenommene $_GET-Daten:
// $_GET = ['search' => '<script>alert(1)</script>', 'page' => '3'];
$data = filter_input_array(INPUT_GET, FILTER_SANITIZE_SPECIAL_CHARS);
if ($data !== false && $data !== null) {
echo $data['search'] . PHP_EOL;
echo $data['page'] . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: filter_input_array() liest die Eingaben direkt aus der ursprünglichen superglobalen Quelle und ist damit immun gegenüber nachträglichen Manipulationen an $_GET oder $_POST im Code. Dies ist ein Vorteil gegenüber dem direkten Zugriff auf die Superglobalen.
Validierung vs. Bereinigung: Validierungsfilter (z. B. FILTER_VALIDATE_INT) geben false zurück, wenn der Wert ungültig ist. Bereinigungsfilter (z. B. FILTER_SANITIZE_SPECIAL_CHARS) verändern den Wert, geben aber niemals false zurück. Beide Zwecke sollten nicht verwechselt werden.
Deprecation: Ab PHP 8.1 ist FILTER_SANITIZE_STRING als veraltet markiert. Es empfiehlt sich stattdessen FILTER_SANITIZE_SPECIAL_CHARS oder htmlspecialchars() zu verwenden.
Achtung bei Arrays: Um Array-Eingaben (z. B. Checkboxgruppen) zu filtern, muss das Flag FILTER_REQUIRE_ARRAY oder FILTER_FORCE_ARRAY gesetzt werden, sonst schlägt die Filterung fehl.