Détecter / trouver une liste de mots interdits (bani) dans une chaine (de caractères) en php
Petite fonction « vite faite » permettant de détecter dans une chaîne de caractères, si un ou des mots bannis y figurent.
Dans la pratique, cela servirait en bloquer une action en cas de mots injurieux.
La fonction:
<?php
function IsBLWord($string)
{
//LISTE DES MOTS A TROUVER
$badword=array("CONNARD","ENCULE");
$i = 0; //initialisation du compteur
$Cbadword=count($badword);
while ($i <= $Cbadword-1) {
if (preg_match("/b$badword[$i]b/i", $string))
{
$i=$Cbadword; //un des mots a été trouvé, on stop la boucle
$finded="1"; //on indique qu'un mot a été trouvé
}
else
{
$finded="0"; //on indique qu'aucun mot a été trouvé
}
$i++;
}
if($finded=="1")
{RETURN true;} //on mot été trouvé, on retourne true
else
{RETURN false;} //aucun mot a été trouvé, on retourne false
}
?>
Utilisation :
<?php
$txt="Le voila le connard du quartier";
if(IsBLWord($txt)==TRUE)
{
exit; //on bloque l'action car le terme "connard" figure dans la chaine.
}
?>
Il y a certainement moyen d'optimiser cela… ou utiliser une autre regex.
mais celle-ci fonctionne très bien pour mon utilisation 🙂
UPDATE : La fonction PHP strpos() peut être utilisée si l'on veut détecter qu'un mot.