Je souhaite filtrer les gros mot dans le texte et les gros mot doive est placer dans une basse de donné. Donc j’ai essayer d’utilisé les Rejex, mais apparemment elle ne prend pas en compte les variables, comment faire ?
Vois mon code :
<?php include('./conf.php');
$link = mysql_connect($mysql_server, $mysql_user, $mysql_pass); mysql_select_db($mysql_db) or die("Selection de la basse de donne : Echec"); $query = "SELECT * FROM insulte"; $resultquery = mysql_query($query);
//Les gros mot ! $texte = 'Merde
Fuck';
$texte = stripslashes($texte); // On enlève les slash qui se seraient ajoutés automatiquement $texte = htmlentities($texte); // On rend inoffensives les balises HTML que le visiteur a pu rentrer $texte = nl2br($texte); // On crée des <br /> pour conserver les retours à la ligne
while($afficheresult = mysql_fetch_assoc($resultquery))// tant qu'il y a des enregistrement faire { $insulte = $afficheresult['nom']; $texte = preg_replace("!$insulte!usU", '*********', $texte); //Tentative de remplacement des gros mots }
Ta méthode va générer des tonnes de str_replace ! alors qu'un seul suffit :
$insulte = array(); while($afficheresult = mysql_fetch_assoc($resultquery))// tant qu'il y a des enregistrement faire { $insulte[] = $afficheresult['nom']; } $texte = str_replace($insulte, '*********', $texte); //Tentative de remplacement des gros mots
Je vous donne quand meme les solutions :
Solution 1 :
<?php include('./conf.php');
$link = mysql_connect($mysql_server, $mysql_user, $mysql_pass); mysql_select_db($mysql_db) or die("Selection de la basse de donne : Echec"); $query = "SELECT * FROM insulte"; $resultquery = mysql_query($query);
//Les gros mot ! $texte = 'Merde
Fuck ah coool';
while($afficheresult = mysql_fetch_assoc($resultquery))// tant qu'il y a des enregistrement faire { $insulte = $afficheresult['nom']; $texte = preg_replace('!'.$insulte.'!isU', '*********', $texte); //Tentative de remplacement des gros mots }
$link = mysql_connect($mysql_server, $mysql_user, $mysql_pass); mysql_select_db($mysql_db) or die("Selection de la basse de donne : Echec"); $query = "SELECT * FROM insulte"; $resultquery = mysql_query($query);
$bou = '1'; while($afficheresult = mysql_fetch_assoc($resultquery))// tant qu'il y a des enregistrement faire { if($bou != '1') { $insulte .= '|'.$afficheresult['nom']; } else { $insulte .= $afficheresult['nom']; $bou = ';)'; } //echo $afficheresult['nom']; }
$message='Salaud, c\'est un petit test pour enlever les fuck des mots interdits,
genre enfoirés, connard et bien d\'autres
merdes même genre';
Donc si jamais quelqu'un dit "Je t'emMerde" et ben ça sera remplacé par "Je t'em******", ce qui ne va pas du tout
J'suis déjà dehors, désolé mais fallait que je la place (mais vous me comprenez non ?) ====> []
str_replace, str_ireplace ne fonctionne pas.
Maintenant, si vous pensez que si, testez ceci :
<?php $mot=array('con','pute','merde','enfoiré'); $change='*****'; $phrase='Ah les enfoirés, ils ne veulent pas reconnaître que sans regex, on ne sera pas à l\'abri d\'emmerdements.<br />';
// ===== Avec str_replace (ou str_ireplace) ===== echostr_replace($mot,$change,$phrase);
// ===== La même chose avec preg_replace ===== echopreg_replace('`\b('.implode('|',$mot).')[sx]?\b`si',$change, $phrase); ?>
CQFD !
Avec l'avantage énorme que l'on peut avec la regex gérer une forme de pluriel.
Avec str_replace, toutes les versions d'un gros mots devront être présentes.
Maintenant pour en revenir au code précédent, je ne comprends pas pourquoi tu met tout ça dans un while.
Pour ce genre de truc (pas fiable), perso j'utiliserais un fichier plat.
Hum avec str_ireplace ça donnera :
Ha les *****s, ils ne veulent pas reconnaître que sans regex, on ne sera pas à l'abri d'em*****ments.
Mais je rejoins l'avis, ici une regex une nécessaire, c'était juste pour placer ma connerie le str_replace
Mais, ce n'est pas très fiable, pour faire une vraie censure, rien ne remplacera des modos (parce que m€rde alors, qu'est-ce que c'est c0n, ce pµtain de truc marche pas)
C pour éviter les gros mots principaux comme, biiiiiiip, biiiiiiip, biiiiiiiiip, ...
les biiip
<?php $mot=array('con','pute','merde','enfoiré'); $change='*****'; $phrase='Ah les enfoirés, ils ne veulent pas reconnaître que sans regex, on ne sera pas à l\'abri d\'emmerdements.<br />';
// ===== Avec str_replace (ou str_ireplace) ===== echostr_replace($mot,$change,$phrase); ?>
Ce code parait plus optimisé, maintenant il faut rajouter MySQL car le but et de rendre l'administration des gros mots a toute personne utilisant l'administration de mon site.
Je sais pas... j'ai la vague impression que ce que je dis n'est pas clair, pas en français, que mon code est compliqué, illisible, bref, j'ai l'impression de parler dans le vide !!!!!
Je répète en grand, en gras et en rouge :
str_replace ne fera pas la différence entre un mot isolé et un mot enchassé
Donc, si on veut gérer les mots entiers on doit utiliser preg_replace.
On va voir si je le grille
Mot isolé, y a des espaces tout autour, enchassé, c'est par exemple, reconnaitre, dedans y a le mot con qui est enchassé, il est donc à l'intérieur d'un mot
La solution a déjà été donnée
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)