Start · Sprachen · PHP · Referenz · filter_input_array

filter_input_array

Funktion

Liest mehrere externe Eingabevariablen auf einmal und filtert bzw. validiert sie optional anhand definierter Filterregeln.

seit PHP 5.2.0 Kategorie: string

Signatur

filter_input_array(int $type, array|int $options = FILTER_DEFAULT, bool $add_empty = true): array|false|null

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

Typ
array|false|null
Beschreibung
Gibt ein assoziatives Array mit den gefilterten Werten zurück. Einzelne Werte sind 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)
}
string(5) "Alice" int(28) string(17) "alice@example.com" NULL

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;
}
&lt;script&gt;alert(1)&lt;/script&gt; 3

// 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.