Filtro per Chat in PHP
- Maggio 02, 2011
- by
- Donatantonio
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:
<?php $parole = "gratis,sesso,acquista,visitami"; function filtro($testo){ global $parole; $app = split(',',$parole); for($i=0; $i<count($app); $i++){ if(stripos($testo,$app[$i])!==false){ $sostituta = substr($app[$i],0,1); for($j=1; $j<strlen($app[$i])-1; $j++){ $sostituta=$sostituta.'*'; } $sostituta = $sostituta.substr($app[$i],-1); $testo = str_ireplace($app[$i],$sostituta,$testo); } } return $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:
// Richiamo alla funzione require('filtro.php'); // Chiamata alla funzione su testo $messaggio $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.