W3docs

filter_id()

Come usare filter_id() in PHP per ottenere l'ID intero di un filtro dal suo nome, con esempi, valori restituiti e errori comuni.

Introduzione

filter_id() è una funzione PHP piccola ma utile che svolge un solo compito: prende il nome di un filtro (una stringa come "validate_email") e restituisce il relativo ID numerico — l'intero che le costanti FILTER_VALIDATE_EMAIL, FILTER_SANITIZE_STRING e simili contengono internamente.

È essenzialmente l'inverso di filter_list(), che fornisce l'elenco dei nomi dei filtri. Si ricorre a filter_id() quando si ha il nome di un filtro come stringa — tipicamente da configurazione, da un database o da input utente — e si necessita dell'intero che filter_var() e filter_input() si aspettano.

Questa pagina tratta la sintassi, i valori restituiti, un esempio eseguibile e l'errore più comune che le persone commettono con questa funzione.

Sintassi

filter_id(string $name): int|false

Accetta un solo parametro:

  • $name — il nome del filtro come stringa, ad es. "validate_int", "validate_email", "sanitize_email". Sono i nomi in minuscolo restituiti da filter_list(), non i nomi delle costanti FILTER_*.

Restituisce l'ID intero del filtro corrispondente, oppure false se nessun filtro ha quel nome.

Passare il nome del filtro, non il nome della costante

Questo è il punto che crea confusione. L'argomento è il nome breve del filtro in minuscolo — non la costante FILTER_VALIDATE_EMAIL e nemmeno la stringa "FILTER_VALIDATE_EMAIL".

<?php

var_dump(filter_id('validate_email'));        // int(274)  ✅ correct name
var_dump(filter_id('FILTER_VALIDATE_EMAIL')); // bool(false) ❌ that is the constant, not the name
var_dump(filter_id('not_a_real_filter'));     // bool(false) ❌ unknown name

Poiché un nome sconosciuto restituisce false, verificare sempre il risultato prima di usarlo come ID filtro. Un false verrebbe altrimenti silenziosamente convertito a 0 se passato dove ci si aspetta un intero.

Un esempio pratico

Un caso d'uso realistico: si consente agli utenti di scegliere una regola di validazione per nome (da un form, un file di configurazione o una richiesta API) e occorre applicarla dinamicamente. filter_id() trasforma quel nome nell'ID che filter_var() richiede.

<?php

$ruleName = 'validate_email';          // could come from user input or config
$value    = '[email protected]';

$filterId = filter_id($ruleName);

if ($filterId === false) {
    echo "Unknown filter: $ruleName";
} elseif (filter_var($value, $filterId) !== false) {
    echo "'$value' passed the '$ruleName' filter (id $filterId).";
} else {
    echo "'$value' failed the '$ruleName' filter.";
}
// Output: '[email protected]' passed the 'validate_email' filter (id 274).

Si noti il controllo rigoroso === false: un filtro valido come int ha ID 257, che è truthy, ma affidarsi a una verifica di veridicità generica gestirebbe comunque in modo errato un filtro sconosciuto. Confrontare esplicitamente con false mantiene distinti i due casi.

Scoprire i nomi di filtro validi

Per vedere esattamente quali nomi accetta filter_id(), iterare su filter_list():

<?php

foreach (filter_list() as $name) {
    echo $name . ' => ' . filter_id($name) . PHP_EOL;
}
// int => 257
// boolean => 258
// validate_email => 274
// validate_url => 273
// sanitize... and so on

Quando usarla

  • Validazione dinamica — quando il filtro da applicare viene deciso a runtime da una stringa.
  • Mappatura configurazione-filtri — per trasformare nomi di regole leggibili in un file di configurazione negli ID richiesti da filter_var() / filter_input().
  • Introspezione / strumenti — per elencare i filtri disponibili e i loro ID.

Se si conosce già il filtro al momento della scrittura del codice, si può saltare filter_id() e usare direttamente la costante (filter_var($email, FILTER_VALIDATE_EMAIL)) — è più chiaro e non richiede una ricerca.

Funzioni correlate

  • filter_list() — ottieni tutti i nomi dei filtri supportati.
  • filter_var() — filtra una singola variabile tramite ID filtro.
  • filter_input() — filtra un valore proveniente da una sorgente di input.
  • php-filters — panoramica dell'estensione filtri di PHP.

Esercitazione

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