Page 1 sur 2
problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 15:09
par scoubi
Bonjour à tous,
j'ai fait un petit livre d'or dans mon site et je rencontre un problème pour y incérer un petit script pour tenter de supprimer certains mots comme des insultes par exemple :
j'ai donc trois fichiers pour mon livre d'or, un fichier .txt qui stock les messages et un formulaire.
Code : Tout sélectionner
<?php
//Ouverture du fichier en écriture
$fp = fopen("/htdocs/livredor/guestbook.txt",a);
//On convertit les caracteres html
echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1'));
$nom = stripslashes ($_POST['nom']);
$mail = stripslashes ($_POST['mail']);
$message = stripslashes ($_POST['message']);
$mots_a_censurer = array(' con ',' merde ', ' etc... ');
$message = str_replace($mots_a_censurer, ' *** ', $message);
$d = date ( "d/m/Y H:i:s" );
$page = "";
$lemail = $mail;
$page .= " <b>$nom</b> ($lemail) le: $d<br> $message<br><hr>\n";
//On rajoute le message
fwrite($fp,"$page" ,strlen("$page"));
//fermeture du fichier
fclose($fp);
?>
j'ai donc rajouté le code pour repérer et remplacer, mais cela ne fonctionne pas !!!
Code : Tout sélectionner
$mots_a_censurer = array(' con ',' merde ', ' etc... ');
$message = str_replace($mots_a_censurer, ' *** ', $message);
pourriez vous m'aider ?
je vous en remercie par avance
scoubi
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 16:15
par cod57
bonjour tu as des erreurs comme dans le open ... avec le mode a(ppend) pas de guillemets
<?php
//Ouverture du fichier en écriture
$nom='';
$mail='';
$message='';
$chaine='';
$fp = fopen("guestbook.txt","a+");
//On convertit les caracteres html
echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1'));
if(isset($_POST) && !empty($_POST) ){
$nom = stripslashes ($_POST['nom']);
$mail = stripslashes ($_POST['mail']);
$message = stripslashes ($_POST['message']);
$mots_a_censurer = array('con','merde');
$message = str_replace($mots_a_censurer, '***', $message);
}
/*test*/
$mots_a_censurer = array('con','merde');
$testmessage="grosse toto merde con tu es";
$test = str_replace($mots_a_censurer,'***',$testmessage);
$d=date( "d/m/Y H:i:s" );
$page=$test."\r\n";
//On rajoute le message
fwrite($fp,$page,strlen($page));
//fermeture du fichier
fclose($fp);
?>
bon faut mettre à ta sauce ++
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 17:44
par scoubi
merci je vais tester
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 18:09
par scoubi
je te remercie j'ai réussi à l'adapter à mon script mais il y a t'il aussi possibilité d'interdire des expressions composées de plusieurs mots ?
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 18:41
par cod57
une fonction
<?php
function censorWords($text){
$find = array(
'/damn\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
$replace = array(
'dang',
'shoot',
'frick',
'butt',
'butthole'
);
return preg_replace($find,$replace,$text);
}
$text = 'That asshole is an assass!';
echo censorWords($text);
?>
tu peux remplacer les mots par une phrase
$find = array(
'/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
/* ... */
et replace par $replace = '***';
une regex et preg_replace
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 19:12
par scoubi
merci pour cette réponse,
mais je ne comprend pas la fin du message
et replace par $replace = '***';
une regex et preg_replace
je dois modifier comme ceci:
Code : Tout sélectionner
<?php
function censorWords($text){
$find = array( '/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
$replace = array(
'dang',
'shoot',
'frick',
'butt',
'butthole'
);
return preg_replace($find,$replace= '$text;
}
?>
à la place de :
Code : Tout sélectionner
$mots_a_censurer = array('xxxx','xxxx','xxx','xxxx');
$message = str_replace($mots_a_censurer, '***', $message);
j'ai essayé mais ne n'arrive pas à l'adapter à mon code et ou le placer !!!
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 21:22
par scoubi
j'ai donc essayé de le transformer ainsi :
Code : Tout sélectionner
<?php
function censorWords($message){
$find = array( '/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
$replace = array(
'****',
'****',
'****',
'****',
'****',
'****',
);
return preg_replace($find,$replace= $message;
}
?>
mais sans succés
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 21:28
par cod57
oui ça devrait fonctionner ainsi
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 21:35
par cod57
exemple
<?php
function censorWords($text=null){
$find = array( '/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
$replace = '*vilain mot*';
return preg_replace($find,$replace,$text);
}
$message_a_filtrer ='voila le message qui doit etre filtre
il contient shit et aussi fuck et grosse truie qui pue ...';
echo $resultat = censorWords($message_a_filtrer);
?>
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 22:40
par scoubi
merci pour ton aide mais je n'arrive pas à le faire fonctionner !!!
voici mon code :
Code : Tout sélectionner
<?php
function censorWords($text=null){
$find = array( '/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
$replace = '*vilain mot*';
return preg_replace($find,$replace,$text);
}
$message_a_filtrer ='voila le message qui doit etre filtre
il contient shit et aussi fuck et grosse truie qui pue ...';
echo $resultat = censorWords($message_a_filtrer);
?>
<?php
//Ouverture du fichier en écriture
$chaine='';
$fp = fopen("/htdocs/livredor/guestbook.txt",a);
//On convertit les caracteres html
echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1'));
$nom = stripslashes ($_POST['nom']);
$mail = stripslashes ($_POST['mail']);
$message = stripslashes ($_POST['message']);
$d = date ( "d/m/Y H:i:s" );
$page = "";
$lemail = $mail;
$page .= " <b>$nom</b> ($lemail) le: $d<br> $message<br><hr>\n";
//On rajoute le message
fwrite($fp,"$page" ,strlen("$page"));
//fermeture du fichier
fclose($fp);
?>
peux tu me dire pourquoi ?
merci par avance
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 22:46
par scoubi
j'ai avancé en modifiant ainsi
Code : Tout sélectionner
<?php
//Ouverture du fichier en écriture
$fp = fopen("/htdocs/livredor/guestbook.txt",a);
//On convertit les caracteres html
echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1'));
$nom = stripslashes ($_POST['nom']);
$mail = stripslashes ($_POST['mail']);
$message = stripslashes ($_POST['message']);
function censorWords($text=null){
$find = array( '/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
$replace = '*vilain mot*';
return preg_replace($find,$replace,$text);
}
$message_a_filtrer ='voila le message qui doit etre filtre
il contient shit et aussi fuck et grosse truie qui pue ...';
echo $resultat = censorWords($message_a_filtrer);
$d = date ( "d/m/Y H:i:s" );
$page = "";
$lemail = $mail;
$page .= " <b>$nom</b> ($lemail) le: $d<br> $message<br><hr>\n";
//On rajoute le message
fwrite($fp,"$page" ,strlen("$page"));
//fermeture du fichier
fclose($fp);
?>
mais aulieu de mettre **** à la place j'ai une phrase en haut de mon livre d'or :voila le message qui doit être filtre il contient *vilain mot*et aussi *vilain mot*et *vilain mot*... cela vient sans aucun doute
de :
Code : Tout sélectionner
$message_a_filtrer ='voila le message qui doit etre filtre
il contient shit et aussi fuck et grosse truie qui pue ...';
echo $resultat = censorWords($message_a_filtrer);
comment coriger dans $message ?
Re: problème pour censurer des mots dans un livre d'or
Posté : 22 août 2013, 22:53
par scoubi
j'ai modifié comme ceci
Code : Tout sélectionner
function censorWords($text=null){
$find = array( '/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
$replace = '*****';
return preg_replace($find,$replace,$message);
}
$message ='****';
echo $resultat = censorWords($message);
mais du coup il n'affiche comme message **** et n'affiche pas le reste à cause de $message ='****'; !!! snif je tourne en rond tel un poisson rouge dans un bocal !!!
Re: problème pour censurer des mots dans un livre d'or
Posté : 23 août 2013, 00:11
par cod57
un gustbook basic ++
<?php
$mail='';
$nom='';
$message='';
$file = 'guestbook.txt';
/*creation du fichier si inexistant*/
if(!file_exists($file)){
$h=fopen($file,'a+');
fclose($h);
}
/*si les variables sont envoyes de puis le form*/
if(isset($_POST['sbtbtn']) && $_POST['sbtbtn']==='envoyer'){
$mail=htmlspecialchars(strip_tags(trim($_POST['mail'])));
$nom=htmlspecialchars(strip_tags(trim($_POST['nom'])));
$message=htmlspecialchars(strip_tags(trim($_POST['message'])));
function censorWords($find=array(),$text=null){
$replace = ' * ';
return preg_replace($find,$replace,$text);
}
/*liste des mots a filtrer ou expression aussi longue que tu veux*/
$find = array(
'/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);
$newmail = censorWords($find,$mail);
$newnom = censorWords($find,$nom);
$newmessage = censorWords($find,$message);
if(empty($newmail) || empty($newnom) || empty($newnom) ){
echo 'des champs sont vides<br>';
}else{
/*sinon ok on prepare le message*/
$newdata = '<hr>';
$newdata .= 'Posté par <b>'.$newnom.'</b> le '.date('d m Y H:i:s').'<br>';
$newdata .= '<a href="mailto:'.$newmail.'">'.$newmail.'</a><br>';
$newdata .= 'Message:<br>'.$newmessage;
$newdata .= '<hr>';
/*on ouvre le fichier*/
$data = file_get_contents($file);
$newdata = $data.$newdata."\r\n";/*on concatene*/
/*on rajoute le message au messages deja dans le fichier*/
/*on ajoute la ligne*/
$data = file_put_contents($file,$newdata);
}
}
?>
<form method="post" action="">
<br>Nom:
<br><input type="text" name="nom">
<br>Mail:
<br><input type="text" name="mail">
<br>Message:
<br><textarea name="message" cols="51" rows="5"></textarea>
<br><input type="submit" name="sbtbtn" value="envoyer">
</form>
<?php
include($file);
?>
Re: problème pour censurer des mots dans un livre d'or
Posté : 23 août 2013, 00:17
par Invité
$newdata = $data.$newdata."\r\n";/*on concatene*/
ou du plus recent au plus vieux
$newdata = $newdata.$data."\r\n";/*on concatene*/
+++
Re: problème pour censurer des mots dans un livre d'or
Posté : 23 août 2013, 07:07
par scoubi
Un grand merci pour ta réponse, mais j'aimerais comprendre mon erreur.
Pourrais tu me corriger mon script et m'expliquer la ou j'ai faux car je pense que c'est ainsi que l'on progresse.
Je te remercie par avance
Scoubi