Alcune delle più interessanti novità introdotte nella versione 5 di PHP sono le cosiddette filter functions, cioè funzioni native del linguaggio che permettono di monitorare, validare e depurare i dati contenuti all'interno di variabili e argomenti.
Queste funzioni si rivelano uno strumento molto utile per il controllo di parametri di input, stringhe, array e altri costrutti e in molti casi costituiscono un'alternativa valida a complicate istruzioni basate sulle espressioni regolari.
Le filter functions al momento disponibili sono sette, tutte introdotte nella release 5 del linguaggio:
- filter_has_var()
- filter_id()
- filter_input()
- filter_input_array()
- filter_list()
- filter_var_array()
- filter_var()
In questa breve trattazione verranno descritte le caratteristiche di alcune di queste funzioni e le diverse modalità di utilizzo.
I filtri
Per svolgere il loro compito le funzioni precedentemente descritte hanno a disposizione dei filtri, questi ultimi possono essere visualizzati attraverso la funzione filter_list()
che restituisce un array contenente tutti i filtri utilizzabili; a questo proposito si analizzi il seguente esempio:
<?php
print_r(filter_list());
?>
Il risultato dell'esecuzione di queste tre semplici righe di listato sarà il seguente:
Array
(
[0] => int
[1] => boolean
[2] => float
[3] => validate_regexp
[4] => validate_url
[5] => validate_email
[6] => validate_ip
[7] => string
[8] => stripped
[9] => encoded
[10] => special_chars
[11] => unsafe_raw
[12] => email
[13] => url
[14] => number_int
[15] => number_float
[16] => magic_quotes
[17] => callback
)
Da notare come la funzione filter_list()
non sia in grado di restituire l'identificativo univoco dei filtri contenuti all'interno del relativo vettore, essa infatti si limita a mostrare il nome di ciascuno di essi e il numero indice (da 0 a n) che ne stabilisce la posizione all'interno dell'array.
Per ottenere l'ID di un determinato filtro, si dovrà utilizzare invece l'apposita funzione filter_id()
a cui passare il nome dello stesso quale argomento, ad esempio la seguente istruzione:
<?php
echo(filter_id("special_chars"));
?>
restituirà in output l'intero "515" che è appunto il valore dell'identificativo univoco associato al filtro denominato "special_chars" che ha come numero indice "10" nel vettore dei filtri utilizzabili.
Validare i dati con i filtri
I filtri elencati dalla lettura dell'array vengono utilizzati per due ambiti di applicazione:
- la validazione dei dati;
- la depurazione dei dati.
Per quanto riguarda la validazione, sono disponibili i seguenti filtri:
- FILTER_VALIDATE_INT
- FILTER_VALIDATE_BOOLEAN
- FILTER_VALIDATE_FLOAT
- FILTER_VALIDATE_REGEXP
- FILTER_VALIDATE_URL
- FILTER_VALIDATE_EMAIL
- FILTER_VALIDATE_IP
Utilizzare i filtri per la validazione è estremamente semplice, si analizzi a questo proposito il seguente esempio:
<?php
// controllo sul formato di un indirizzo email
// con le filter functions
// definizione di un indirizzo email
$email = "info@megan fox.com";
// controllo tramite funzione e filtro per la validazione
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
{
// messaggio in caso di esito negativo
echo "Indirizzo email non valido.";
}else{
// messaggio in caso di esito positivo
echo "Indirizzo email valido.";
}
?>
Nel caso specifico, la procedura di validazione tramite filtro restituirà esito negativo in quanto l'indirizzo e-mail passato come argomento alla funzione filter_var()
FILTER_VALIDATE_EMAIL
Depurare i dati con i filtri
Per quanto riguarda il filtri messi a disposizione per le filter functions nelle operazioni di depurazione dei dati, essi sono i seguenti:
- FILTER_SANITIZE_STRING
- FILTER_SANITIZE_ENCODED
- FILTER_SANITIZE_SPECIAL_CHARS
- FILTER_SANITIZE_EMAIL
- FILTER_SANITIZE_URL
- FILTER_SANITIZE_NUMBER_INT
- FILTER_SANITIZE_NUMBER_FLOAT
- FILTER_SANITIZE_MAGIC_QUOTES
Così come per i filtri destinati alla validazione, anche l'utilizzo dei parametri per la depurazione dei dati è molto semplice; a questo proposito si osservi il seguente esempio:
<?php
$nome = "<h1>Megan Fox<h1>";
var_dump(filter_var($nome, FILTER_SANITIZE_STRING));
?>
L'output dell'istruzione proposta sarà il seguente:
string(9) "Megan Fox"
Il filtro FILTER_SANITIZE_STRING
, utilizzato come secondo argomento per la funzione filter_var()
, permette infatti di rimuovere i il markup HTML restituendo una stringa depurata dai tags.
Validare e depurare assieme
Le funzioni per la validazione e quelle per la depurazione dei dati possono anche essere utilizzate in combinazione tra loro, come nella seguente funzione personalizzata:
<?php
// definizione di una funzione per la depurazione e
// la validazione di un indirizzo e-mail
function validaEmail($email){
// controllo tramite funzione e filtri per la depurazione e la validazione
return filter_var(filter_var($email, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
}
// test della funzione
if(validaEmail("email@miaemail.it")){
// messaggio in caso di esito positivo
echo "Indirizzo email valido.";
}else{
// messaggio in caso di esito negativo
echo "Indirizzo email non valido.";
}
?>
Nel caso proposto, il filtro FILTER_SANITIZE_EMAIL
si occuperà di depurare una stringa da tutti i caratteri non consentiti per un indirizzo di posta elettronica, dopodiché FILTER_VALIDATE_EMAIL
permetterà di stabilire se l'output ottenuto della precedente depurazione potrà essere considerato o meno un indirizzo e-mail in formato valido.
Oltre ai filtri già esposti per la validazione e la depurazione, sono disponibili anche i seguenti filtri da utilizzare come parametri per le filter functions:
- FILTER_CALLBACK
- FILTER_UNSAFE_RAW
Conclusioni
Le filter functions sono degli strumenti avanzati messi a disposizione da PHP 5 per la validazione e la depurazione di dati da contenuti non desiderati o non validi; nel corso di questa trattazione ne sono state analizzate le caratteristiche e gli ambiti d'utilizzo proponendo anche alcuni esempi pratici. Per approfondimenti si consiglia di consultare l'apposita sezione del manuale ufficiale di PHP.