Quando si realizza una chat in PHP o altro linguaggio è necessario prevedere una funzione che effettui la pulizia dei messaggi inoltrati dagli utenti.
Tale codice dovrà intercettare le parole ritenute non legali e oscurarle in fase di visualizzazione.
A tal proposito realizzeremo una funzione in PHP che chiameremo semplicemente filtro; la quale ammetterà come parametro d’input una stringa di testo, contenente appunto il messaggio da filtrare.
La nostra funzione sostituirà le parole incriminate con degli asterischi, lasciando però inalterali il primo e l’ultimo carattere che la compongono.
Se ad esempio volessimo filtrare dal messaggio tutte le ricorrenze della parola gratis, vedremmo al suo posto la parola: g****s.
Vediamo quindi il codice della funzione filtro:
02 | $parole = "gratis,sesso,acquista,visitami" ; |
04 | function filtro( $testo ){ |
06 | $app = split( ',' , $parole ); |
07 | for ( $i =0; $i < count ( $app ); $i ++){ |
08 | if ( stripos ( $testo , $app [ $i ])!==false){ |
09 | $sostituta = substr ( $app [ $i ],0,1); |
10 | for ( $j =1; $j < strlen ( $app [ $i ])-1; $j ++){ |
11 | $sostituta = $sostituta . '*' ; |
13 | $sostituta = $sostituta . substr ( $app [ $i ],-1); |
14 | $testo = str_ireplace ( $app [ $i ], $sostituta , $testo ); |
La funzione utilizza essenzialmente cinque funzioni PHP per la manipolazione delle stringhe:
– split
– stripos
– strlen
– substr
– str_ireplace
Da notare innanzitutto la presenza di una variabile parole definita a livello globale, che conterrà appunto la sequenza di parole, separate da virgola(,), da filtrare.
Per personalizzare il codice è sufficiente aggiungere le stringhe da filtrare nella variabile parole.
Tornando alla funzione, vediamo per grandi linee le operazioni che essa effettua sul testo in input:
- Preleva tutte le parole da filtrare (split)
- Cerca ciascuna parola nel messaggio di input (stripos)
- Realizza una parola sostitutiva calcolata sulla lunghezza dell’originale (strlen)
- La parola sostitutiva mantiene il carattere iniziale e finale dell’originale (substr)
- La parola incriminata viene sostituita (str_ireplace)
Infine il messaggio viene restituito pulito.
La funzione, una volta salvata in un file separato(ad esempio filtro.php) verrà così invocata:
5 | $stringa_pulita = filtro( $messaggio ); |
La funzione può tornare molto utile anche qualora si desiderasse eliminare dal messaggio link o url poco graditi. Basterà, come già detto sopra, aggiungere le stringhe da controllare alla variabile globale $parole, prestando attenzione a separare ciascuna da una virgola.
Cliccando qui è possibile vedere in azione il codice.
Cliccando qui è possibile scaricare il codice.