par
supercanard » 14 juin 2008, 00:07
Bonsoir
Je cherche à approfondir une fonction de bannissement de mots interdits.
Au départ il y avait une simple liste de mots interdits, une chaine et un preg_match()
Le problème c'est que si le mot filou est considéré comme interdit et qu'on envoi la chaine petitfilou, c'est bel et bien de la gruge. Il faut donc le considérer comme mot interdit. Mais maintenant si je prend le mot con (désolé hein...) et la chaine concombre, là ça n'a rien à voir, il ne faut pas en tenir compte.
J'ai donc exploser la chaine pour pouvoir faire un preg_match() mot par mot dans un premier temps.
Ensuite si TRUE je compare le mot suspect et le mot interdit avec le mot suspect. Si ils ont le même nombre de caractères il n'y a pas de doutes. Sinon le mot est quand même suspect mais il ya un doute... et voilà je suis bloqué ici
// Chaine à verifier
$chaine = 'idiot du village continu sa route<br>';
// Liste des mots interdits ( sans accents et séparé par des virgules )
$MotsInterdits = 'enfoire,con,idiot';
$MotsInterdits = explode( ',', $MotsInterdits);
// On remplace les caractères avec accent par leur équivalent sans accent
$chaine = strtr( $chaine, 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ',
'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn' );
// On explode les suites de caractères séparés par des espaces
$chaine = explode( ' ', $chaine );
// On parcour le tableau des mots interdits
foreach( $MotsInterdits as $interdit )
{
// On parcour le tableau des mots de la chaine à vérifier
foreach( $chaine as $mot )
{
// On cherche le mot dans le masque
if ( preg_match( '/'.$interdit.'/i', $mot ) )
{
// On compare sur le nombre de caractères
if ( ( strlen( $interdit ) == strlen( $mot ) ) ) //
{
echo 'le mot '.$mot.' est à banir<br />';
}
else
{
echo 'le mot '.$mot.' est peut être à banir...<br />';
}
}
}
}
Bonsoir
Je cherche à approfondir une fonction de bannissement de mots interdits.
Au départ il y avait une simple liste de mots interdits, une chaine et un preg_match()
Le problème c'est que si le mot filou est considéré comme interdit et qu'on envoi la chaine petitfilou, c'est bel et bien de la gruge. Il faut donc le considérer comme mot interdit. Mais maintenant si je prend le mot con (désolé hein...) et la chaine concombre, là ça n'a rien à voir, il ne faut pas en tenir compte.
J'ai donc exploser la chaine pour pouvoir faire un preg_match() mot par mot dans un premier temps.
Ensuite si TRUE je compare le mot suspect et le mot interdit avec le mot suspect. Si ils ont le même nombre de caractères il n'y a pas de doutes. Sinon le mot est quand même suspect mais il ya un doute... et voilà je suis bloqué ici :D
[php]
// Chaine à verifier
$chaine = 'idiot du village continu sa route<br>';
// Liste des mots interdits ( sans accents et séparé par des virgules )
$MotsInterdits = 'enfoire,con,idiot';
$MotsInterdits = explode( ',', $MotsInterdits);
// On remplace les caractères avec accent par leur équivalent sans accent
$chaine = strtr( $chaine, 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ',
'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn' );
// On explode les suites de caractères séparés par des espaces
$chaine = explode( ' ', $chaine );
// On parcour le tableau des mots interdits
foreach( $MotsInterdits as $interdit )
{
// On parcour le tableau des mots de la chaine à vérifier
foreach( $chaine as $mot )
{
// On cherche le mot dans le masque
if ( preg_match( '/'.$interdit.'/i', $mot ) )
{
// On compare sur le nombre de caractères
if ( ( strlen( $interdit ) == strlen( $mot ) ) ) //
{
echo 'le mot '.$mot.' est à banir<br />';
}
else
{
echo 'le mot '.$mot.' est peut être à banir...<br />';
}
}
}
}[/php]