filter_var()
PHP offre funzioni integrate per filtrare e validare i dati in input. filter_var() consente di filtrare e sanificare valori singoli.
Introduzione
filter_var() è lo strumento integrato di PHP per validare e sanificare un singolo valore. Validare significa verificare se un valore corrisponde a un formato atteso (un'email reale, un intero in un intervallo, un URL valido) e restituire il valore in caso affermativo oppure false in caso contrario. Sanificare significa pulire un valore rimuovendo o eseguendo l'escape dei caratteri non ammessi.
Non fidarti mai dei dati provenienti dall'esterno del tuo script — campi di un modulo, query string, cookie, payload API. Elaborarli con filter_var() prima di archiviarli, visualizzarli o utilizzarli è uno dei modi più semplici per mantenere la tua applicazione sicura e prevedibile. Questa pagina illustra la sintassi, le due modalità (validazione e sanificazione), i filtri e i flag più comuni, e le insidie in cui si incorre più facilmente.
Sintassi
filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed| Parametro | Obbligatorio | Descrizione |
|---|---|---|
$value | sì | Il valore da filtrare. |
$filter | no | L'ID del filtro da applicare, ad es. FILTER_VALIDATE_INT. Il valore predefinito è FILTER_DEFAULT, che non applica alcun filtro. |
$options | no | Un array associativo di opzioni/flag, oppure una singola costante flag, per regolare il comportamento del filtro. |
Valore restituito: il valore filtrato (e possibilmente convertito) in caso di successo, oppure false in caso di errore. Tieni presente che un filtro di validazione restituisce il valore stesso — confronta quindi sempre con === quando il valore valido potrebbe essere falsy (come 0 o una string vuota).
Validazione dei dati
La validazione risponde a una domanda sì/no: questo valore è accettabile? Il filtro restituisce il valore in caso di successo e false in caso di errore.
Validare un indirizzo email
I filtri di validazione più utili sono:
| Filtro | Valida |
|---|---|
FILTER_VALIDATE_INT | Un intero (facoltativamente all'interno di min_range/max_range). |
FILTER_VALIDATE_FLOAT | Un numero in virgola mobile. |
FILTER_VALIDATE_BOOLEAN | "1", "true", "on", "yes" → true; "0", "false", "off", "no", "" → false. |
FILTER_VALIDATE_EMAIL | Un indirizzo email. |
FILTER_VALIDATE_URL | Un URL. |
FILTER_VALIDATE_IP | Un indirizzo IPv4/IPv6. |
FILTER_VALIDATE_REGEXP | Un valore corrispondente a un pattern PCRE. |
La trappola di === false
Poiché un filtro di validazione restituisce il valore, un risultato pari a 0 o "0" è valido ma falsy. Usa sempre un confronto rigoroso:
Sanificazione dei dati
La sanificazione non rifiuta un valore — lo pulisce e restituisce la string ripulita.
Sanificare un indirizzo email
Filtri di sanificazione comuni:
| Filtro | Effetto |
|---|---|
FILTER_SANITIZE_EMAIL | Rimuove i caratteri non ammessi in un'email. |
FILTER_SANITIZE_URL | Rimuove i caratteri non ammessi in un URL. |
FILTER_SANITIZE_NUMBER_INT | Mantiene le cifre e +/-. |
FILTER_SANITIZE_NUMBER_FLOAT | Mantiene le cifre, +/- e (con flag) .,e. |
FILTER_SANITIZE_SPECIAL_CHARS | Codifica in HTML <, >, &, " e altri caratteri. |
FILTER_SANITIZE_FULL_SPECIAL_CHARS | Come htmlspecialchars() con ENT_QUOTES. |
Nota:
FILTER_SANITIZE_STRINGè stato deprecato in PHP 8.1. Per pulire le string per l'output HTML, preferiscihtmlspecialchars()al momento della visualizzazione.
Utilizzo di opzioni e flag
Il terzo argomento affina il comportamento di un filtro. Passalo come array con 'options' (e facoltativamente 'flags'):
I flag possono essere passati direttamente come terzo argomento quando non è necessaria la forma con array:
Validazione vs. sanificazione — quando usare quale
- Valida quando hai bisogno di una decisione sì/no: rifiuta la richiesta, mostra un errore, riprova. Usa i filtri di validazione per email, numeri, URL e IP nei moduli e nelle API.
- Sanifica quando devi accettare l'input ma vuoi che venga ripulito dai caratteri pericolosi o indesiderati prima dell'uso.
- Le due modalità sono complementari — un pattern comune è validare in input ed eseguire l'escape (ad es. con
htmlspecialchars()) in output, invece di affidarsi ai soli filtri di sanificazione.
Insidie comuni
- Un filtro di validazione restituisce il valore, non
true. Confronta con=== falseper rilevare un errore. filter_var()opera su un singolo valore scalare. Per filtrare più valori contemporaneamente, usafilter_var_array()oppure, per i dati delle richieste,filter_input_array().FILTER_VALIDATE_BOOLEANrestituiscenull(nonfalse) per i valori non riconosciuti soltanto quando si passaFILTER_NULL_ON_FAILURE; altrimenti restituiscefalse.- Non affidarti ai filtri di sanificazione per l'escape dell'output in contesti critici per la sicurezza — esegui l'escape al momento del rendering.
Argomenti correlati
filter_var_array()— filtra più variabili in una sola chiamata.filter_input_array()— filtra i dati delle richieste ($_GET,$_POST).- Validazione dei moduli PHP — applicare questi filtri a moduli reali.
- Validare URL ed email in PHP
htmlspecialchars()— escape per un output HTML sicuro.trim()— rimuovere gli spazi bianchi prima del filtraggio.
Conclusione
filter_var() è un modo compatto e affidabile per validare e sanificare i valori individuali in PHP. Utilizza i filtri di validazione per accettare o rifiutare l'input, i filtri di sanificazione per ripulirlo, e ricordati di confrontare i risultati di validazione con === false. Combinata con filter_var_array() per i dati in blocco e htmlspecialchars() per l'output, costituisce la base della gestione sicura dell'input.