W3docs

filter_input_array()

Apprenez comment filter_input_array() valide et assainit une requête GET ou POST entière en PHP : syntaxe, options par champ, indicateurs et résultats.

Introduction

filter_input_array() filtre un lot complet d'entrées externes — chaque champ d'une requête $_GET ou $_POST — en un seul appel, au lieu d'extraire les valeurs des superglobales une par une. Vous lui fournissez une définition qui associe chaque champ attendu à un filtre (validation ou assainissement), et elle renvoie un array de valeurs nettoyées et dont le type a été vérifié.

Cette page couvre la syntaxe, comment lire le résultat (la différence entre false, null et une clé absente), comment attacher des options et des indicateurs à des champs individuels, et comment filter_input_array() se compare à ses équivalents pour une valeur unique et pour un array arbitraire.

Pour une vue d'ensemble de l'extension filter de PHP, consultez PHP Filters et PHP Advanced Filters.

Syntaxe

filter_input_array(int $type, array|int $options = FILTER_DEFAULT, bool $add_empty = true): array|false|null
ParamètreSignification
$typeLa source d'entrée à lire : INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER ou INPUT_ENV.
$optionsSoit un identifiant de filtre unique appliqué à tous les champs, soit un array associatif associant chaque nom de champ à son propre filtre / définition (le cas courant).
$add_emptyLorsque true (valeur par défaut), les champs nommés dans la définition mais absents de l'entrée apparaissent dans le résultat sous la forme null. Mettez-le à false pour les omettre.

Valeur de retour :

  • Un array de valeurs filtrées en cas de succès.
  • false si $type est invalide.
  • null si la source d'entrée demandée ne contient aucune donnée (et que $add_empty est false).

La partie cruciale est la lecture des entrées individuelles, et non la valeur de retour globale :

Résultat par champCe que cela signifie
La valeur nettoyéeLe champ a passé son filtre.
falseUn filtre de validation a rejeté la valeur (par ex. "abc" pour FILTER_VALIDATE_INT).
nullLe champ était nommé dans la définition mais absent de l'entrée.

Un exemple autonome

filter_input_array() lit depuis les sources réelles INPUT_POST / INPUT_GET, qui n'existent que lors d'une requête web. Pour illustrer les définitions de filtres d'une manière exécutable en ligne de commande, l'extrait ci-dessous utilise filter_var_array() — il accepte exactement la même définition $filters et applique le même moteur, donc la sortie est identique à ce que filter_input_array(INPUT_POST, $filters) produirait pour ces données.

<?php

// In a real request this array would be $_POST.
$input = [
    'name'  => '<b>Jane</b>',
    'age'   => '30',
    'email' => '[email protected]',
];

$filters = [
    'name'  => FILTER_SANITIZE_FULL_SPECIAL_CHARS, // sanitize: escape HTML
    'age'   => FILTER_VALIDATE_INT,                // validate: must be an int
    'email' => FILTER_VALIDATE_EMAIL,              // validate: must be an email
];

$data = filter_var_array($input, $filters);
// In a controller you would write:
// $data = filter_input_array(INPUT_POST, $filters);

print_r($data);

Sortie :

Array
(
    [name] => &lt;b&gt;Jane&lt;/b&gt;
    [age] => 30
    [email] => [email protected]
)

Remarquez que name a été assaini (les balises ont été échappées), tandis que age et email ont été validés (renvoyés respectivement comme un véritable int et une string vérifiée). Un champ qui n'est pas listé dans $filters est entièrement supprimé du résultat.

Gestion des champs invalides et manquants

Étant donné qu'une validation échouée produit false et qu'un champ manquant produit null, ne supposez jamais que chaque entrée est utilisable. Vérifiez avant de faire confiance aux données :

<?php

$input = [
    'age'   => 'not-a-number',
    'email' => 'bad-email',
];

$filters = [
    'age'     => FILTER_VALIDATE_INT,
    'email'   => FILTER_VALIDATE_EMAIL,
    'missing' => FILTER_VALIDATE_INT, // declared, but absent from input
];

$data = filter_var_array($input, $filters);

print_r($data);

Sortie :

Array
(
    [age] =>
    [email] =>
    [missing] =>
)

print_r n'affiche rien après les clés car age et email sont false (invalides) et missing est null (absent). Dans du code réel, distinguez-les explicitement :

<?php
if ($data['age'] === false) {
    echo "Age is not a valid integer.";
} elseif ($data['age'] === null) {
    echo "Age was not submitted.";
} else {
    echo "Age is {$data['age']}.";
}

Options et indicateurs par champ

Au lieu d'une simple constante de filtre, un champ peut être un array imbriqué avec les clés filter, options et flags — c'est là que la fonction devient puissante. Utilisez options pour des choses comme une plage d'entiers, et l'indicateur FILTER_REQUIRE_ARRAY lorsqu'un champ arrive sous forme d'array (par ex. une sélection multiple ou name="tags[]").

<?php

$input = [
    'age'  => '200',
    'tags' => ['<a>', '<b>'],
];

$args = [
    'age' => [
        'filter'  => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 0, 'max_range' => 120],
    ],
    'tags' => [
        'filter' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
        'flags'  => FILTER_REQUIRE_ARRAY, // apply the filter to each element
    ],
];

print_r(filter_var_array($input, $args));

Sortie :

Array
(
    [age] =>
    [tags] => Array
        (
            [0] => &lt;a&gt;
            [1] => &lt;b&gt;
        )

)

age est false car 200 est en dehors de la plage 0–120, et chaque élément de tags a été assaini individuellement grâce à FILTER_REQUIRE_ARRAY.

Comparaison avec les fonctions associées

FonctionLit depuisForme de l'entrée
filter_input()Superglobale INPUT_*un seul champ
filter_input_array()Superglobale INPUT_*un array de requête complet
filter_var()Une variable que vous passezune valeur unique
filter_var_array()Une variable que vous passezun array que vous passez

Utilisez filter_input_array() lorsque les données se trouvent dans $_GET/$_POST/etc. ; utilisez filter_var_array() lorsque vous détenez déjà l'array dans une variable.

Compatibilité des versions PHP

FILTER_SANITIZE_STRING a été déprécié en PHP 8.1 et supprimé en PHP 8.2. Pour l'assainissement de string en PHP moderne, utilisez FILTER_SANITIZE_FULL_SPECIAL_CHARS (comme dans les exemples ci-dessus) ou, pour la validation, un filtre dédié tel que FILTER_VALIDATE_EMAIL.

Pourquoi l'utiliser

  • Sécurité. Filtrer l'intégralité de la requête en un seul endroit empêche les valeurs non validées de s'infiltrer dans les requêtes ou le balisage. Combinez-le avec la validation de formulaires et des instructions préparées.
  • Lisibilité. La définition $filters joue le rôle d'un schéma pour l'entrée attendue, séparant les règles de validation de la logique métier.
  • Cohérence. Chaque champ passe par le même moteur éprouvé, vous évitant d'écrire manuellement des vérifications isset() + is_numeric() pour chaque champ.

Voir aussi PHP Superglobals pour savoir d'où provient cette entrée.

Pratique

Pratique
En PHP, quel est le but de la fonction filter_input_array selon les informations fournies sur le site w3docs ?
En PHP, quel est le but de la fonction filter_input_array selon les informations fournies sur le site w3docs ?
Was this page helpful?