W3docs

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
ParametroObbligatorioDescrizione
$valueIl valore da filtrare.
$filternoL'ID del filtro da applicare, ad es. FILTER_VALIDATE_INT. Il valore predefinito è FILTER_DEFAULT, che non applica alcun filtro.
$optionsnoUn 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

php— editable, runs on the server

I filtri di validazione più utili sono:

FiltroValida
FILTER_VALIDATE_INTUn intero (facoltativamente all'interno di min_range/max_range).
FILTER_VALIDATE_FLOATUn numero in virgola mobile.
FILTER_VALIDATE_BOOLEAN"1", "true", "on", "yes"true; "0", "false", "off", "no", ""false.
FILTER_VALIDATE_EMAILUn indirizzo email.
FILTER_VALIDATE_URLUn URL.
FILTER_VALIDATE_IPUn indirizzo IPv4/IPv6.
FILTER_VALIDATE_REGEXPUn 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:

php— editable, runs on the server

Sanificazione dei dati

La sanificazione non rifiuta un valore — lo pulisce e restituisce la string ripulita.

Sanificare un indirizzo email

php— editable, runs on the server

Filtri di sanificazione comuni:

FiltroEffetto
FILTER_SANITIZE_EMAILRimuove i caratteri non ammessi in un'email.
FILTER_SANITIZE_URLRimuove i caratteri non ammessi in un URL.
FILTER_SANITIZE_NUMBER_INTMantiene le cifre e +/-.
FILTER_SANITIZE_NUMBER_FLOATMantiene le cifre, +/- e (con flag) .,e.
FILTER_SANITIZE_SPECIAL_CHARSCodifica in HTML <, >, &, " e altri caratteri.
FILTER_SANITIZE_FULL_SPECIAL_CHARSCome htmlspecialchars() con ENT_QUOTES.

Nota: FILTER_SANITIZE_STRING è stato deprecato in PHP 8.1. Per pulire le string per l'output HTML, preferisci htmlspecialchars() 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'):

php— editable, runs on the server

I flag possono essere passati direttamente come terzo argomento quando non è necessaria la forma con array:

php— editable, runs on the server

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 === false per rilevare un errore.
  • filter_var() opera su un singolo valore scalare. Per filtrare più valori contemporaneamente, usa filter_var_array() oppure, per i dati delle richieste, filter_input_array().
  • FILTER_VALIDATE_BOOLEAN restituisce null (non false) per i valori non riconosciuti soltanto quando si passa FILTER_NULL_ON_FAILURE; altrimenti restituisce false.
  • 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

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.

Esercitazione

Pratica
Qual è la funzione di filter_var() in PHP?
Qual è la funzione di filter_var() in PHP?
Was this page helpful?