W3docs

filter_var_array()

PHP offre una serie di funzioni integrate per filtrare e validare i dati di input. filter_var_array() applica filtri a più variabili contemporaneamente.

Introduzione

PHP offre una serie di funzioni integrate per filtrare e validare i dati di input dell'utente. Una di queste è filter_var_array(), che applica filtri a molte variabili contemporaneamente invece di chiamare filter_var() ripetutamente. È lo strumento principale per l'elaborazione pulita dei form: si descrivono le regole per ogni campo in un singolo array, si passa l'input grezzo e si ottiene un risultato completamente validato e sanificato.

Questo capitolo tratta la sintassi, i tre modi per definire i filtri, il comportamento del flag $add_empty, come leggere il valore restituito e le insidie comuni — con esempi eseguibili.

Sintassi

La sintassi di filter_var_array() è la seguente:

La sintassi PHP di filter_var_array()

filter_var_array ( array $data , mixed $definition [, bool $add_empty = true ] ) : mixed
ParametroSignificato
$dataUn array associativo di valori di input da filtrare (ad esempio $_POST o $_GET).
$definitionCome filtrare. Può essere una singola costante di filtro applicata a ogni valore, oppure un array che mappa ciascuna chiave al proprio filtro/opzioni.
$add_emptySe true (predefinito), le chiavi presenti in $definition ma assenti da $data vengono aggiunte al risultato con valore null. Se false, vengono saltate.

La funzione restituisce l'array filtrato in caso di successo, o false in caso di errore (ad esempio, se $data non è un array).

I tre modi per definire i filtri

Il parametro $definition è il cuore di questa funzione. Può assumere tre forme.

1. Un filtro per ogni valore — si passa una singola costante di filtro:

<?php
$data = ['a' => '1', 'b' => 'not-a-number', 'c' => '42'];
$result = filter_var_array($data, FILTER_VALIDATE_INT);
print_r($result);

Output — i valori che non superano il filtro diventano false:

Array
(
    [a] => 1
    [b] =>
    [c] => 42
)

2. Una mappa di filtri per chiave — si mappa ciascuna chiave al proprio filtro costante:

<?php
$data = [
    'name'  => '  John  ',
    'age'   => '30',
    'email' => '[email protected]',
];

$definition = [
    'name'  => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
    'age'   => FILTER_VALIDATE_INT,
    'email' => FILTER_VALIDATE_EMAIL,
];

print_r(filter_var_array($data, $definition));
Array
(
    [name] =>   John  
    [age] => 30
    [email] => [email protected]
)

3. Un array per chiave con filtro, flag e opzioni — per un controllo granulare, si mappa una chiave a un array che specifica il filter insieme a flags e options:

<?php
$data = ['age' => '150', 'tags' => ['php', 'mysql']];

$definition = [
    'age' => [
        'filter'  => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 0, 'max_range' => 120],
    ],
    'tags' => [
        'filter' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
        'flags'  => FILTER_REQUIRE_ARRAY,
    ],
];

var_dump(filter_var_array($data, $definition));
array(2) {
  ["age"]=>
  bool(false)
  ["tags"]=>
  array(2) {
    [0]=>
    string(3) "php"
    [1]=>
    string(5) "mysql"
  }
}

age è false perché 150 è fuori dall'intervallo 0–120, e FILTER_REQUIRE_ARRAY indica al filtro di trattare tags come un array e sanificare ogni elemento.

Utilizzo con l'input del form

Nel codice reale l'array $data è solitamente una superglobale come $_POST. La stessa definizione vista poc'anzi applica le regole e memorizza i valori puliti in $result:

Esempio di PHP filter_var_array()

<?php

$filters = [
    'name'  => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
    'age'   => FILTER_VALIDATE_INT,
    'email' => FILTER_VALIDATE_EMAIL,
];

// $add_empty = false skips keys missing from $_POST instead of adding them as null
$result = filter_var_array($_POST, $filters, false);

if ($result === false || $result['email'] === false) {
    // Handle missing or invalid input
    echo 'Please correct the form.';
} else {
    // $result now holds clean, validated values
}

Si noti che una validazione fallita produce false per quella chiave, mentre la funzione restituisce false complessivamente solo quando $data stesso non è valido. Ispezionare sempre entrambi. Per filtrare $_POST o $_GET direttamente dallo stream di input, si veda la funzione strettamente correlata filter_input_array().

Nota: FILTER_SANITIZE_STRING è stata rimossa in PHP 8.0. Utilizzare invece FILTER_SANITIZE_FULL_SPECIAL_CHARS.

Vantaggi

L'utilizzo di filter_var_array() migliora la sicurezza e l'affidabilità dell'applicazione PHP elaborando molte variabili in un'unica chiamata. Validare l'input prima di ulteriori elaborazioni garantisce che l'applicazione accetti solo dati attesi, riducendo il rischio di injection e bug causati da dati malformati. Mantenere le regole in un array $definition dichiarativo separa inoltre la validazione dalla logica di business, rendendo gli script più modulari e facili da mantenere.

Conclusione

filter_var_array() è il modo efficiente per validare e sanificare un intero insieme di variabili in un'unica operazione. Scegliere la forma di definizione più adatta alle proprie esigenze — un filtro per tutti, una mappa per chiave, o array di opzioni per chiave — e controllare sempre false per ogni campo. Per approfondire, si legga il capitolo sulla panoramica dei filtri PHP e quello sulla validazione dei form PHP.

Pratica

Pratica
Qual è lo scopo della funzione 'filter_var_array()' in PHP?
Qual è lo scopo della funzione 'filter_var_array()' in PHP?
Was this page helpful?