A voir également:
- [PHP] Regex anti insultes
- Easy php - Télécharger - Divers Web & Internet
- Anti-scintillement 50 ou 60 hz ✓ - Forum TV & Vidéo
- Anti slash ✓ - Forum Programmation
- Anti brume pokemon platine ✓ - Forum Jeux vidéo
- Anti slash sur mac ✓ - Forum MacOS
7 réponses
Stanislas Poisson
Messages postés
423
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
22 mai 2018
66
4 janv. 2013 à 11:51
4 janv. 2013 à 11:51
Si tu veux just remplacer les mot, le mieux seriat encore de passer par un str_replace, avec un tableau pour les mot rechercher. comme cela, pas besoin, de faire une boucle sur un preg_replace dont l'utilite sera nul et non avenue du fait que tu ne cherche que des mots. (a tester afin de voir si les espaces précédent et suivant sont important)
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
4 janv. 2013 à 13:42
4 janv. 2013 à 13:42
essayes avec:
# con | cul | bite #i
Bonjour,
Merci, j'ai remplacé par str_ireplace (pour la casse insensible) mais j'ai un dernier problème.
J'ai marqué dans ma regex
Le problème est le suivant au travers d'exemples (l'underscore remplace l'espace):
Au travers de phrases, ça donne:
Merci d'avance !
Merci, j'ai remplacé par str_ireplace (pour la casse insensible) mais j'ai un dernier problème.
J'ai marqué dans ma regex
" con ","con "," con"
Le problème est le suivant au travers d'exemples (l'underscore remplace l'espace):
conseil ou conseil_ => conseil _conseil ou _conseil_ => *****seil mécontent (avec espace devant et/ou derrière) => mécontent bacon ou _bacon => bacon _bacon_ ou bacon_ => ba*****
Au travers de phrases, ça donne:
conseil j'ai pour toi=> OK j'ai un conseil pour toi=> j'ai un *****seil pour toi je vais te donner un conseil=> je vais te donner un *****seil (ne fonctionne pas non plus lorsqu'il y a un point à la fin) j'ai mangé du bacon=> OK bacon j'ai mangé=>ba**** j'ai mangé j'ai mangé du bacon et du lard=> j'ai mangé du ba***** et du lard
Merci d'avance !
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
6 janv. 2013 à 11:52
6 janv. 2013 à 11:52
je vois ce qui te pose pb c'est l'absence d'espace au début ou a la fin d'une phrase, alors essayes ça en passant par un explode et avec une boucle:
<?php $array_insultes=array("con","cul"); function remplacement_mots($chaine,$array_insultes){ //on explode la chaine par rapport à l'espace $array_chaine=explode(' ',$chaine); for($i=0;$i<sizeof($array_chaine);$i++){ if(in_array(trim($array_chaine[$i]),$array_insultes)){ $array_chaine[$i]='****'; //on peut ameliorer en mettant le même nombre d'* que de lettres ? } } //on reforme la chaine $chaine_r=implode(' ',$array_chaine); return $chaine_r; } $chaine_a_traiter="Le conseil du con n'est pas cultivé par le cul"; echo "chaine originale: ".$chaine_a_traiter; echo "<br />chaine traitée: ".remplacement_mots($chaine_a_traiter,$array_insultes); ?>
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
6 janv. 2013 à 13:18
6 janv. 2013 à 13:18
pour forcer en minuscules:
if(in_array(trim(strtolower($array_chaine[$i]),$array_insultes))){
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci Alain_42 pour ta réponse mais elle me pose problème.
Voici mon code modifié:
Il me retourne ceci:
Je n'ai jamais utilisé ces fonctions et j'ai fouillé dans le manuel php mais je ne comprends pas ...
Voici mon code modifié:
<?php session_start(); $array_insultes=array(" ma liste de gros mots "); function remplacement_mots($chaine,$array_insultes){ //on explode la chaine par rapport à l'espace $array_chaine=explode(' ',$chaine); for($i=0;$i<sizeof($array_chaine);$i++) { if(in_array(trim($array_chaine[$i],$array_insultes))) { $array_chaine[$i]='****'; //on peut ameliorer en mettant le même nombre d'* que de lettres ? } } //on reforme la chaine $chaine_r=implode(' ',$array_chaine); return $chaine_r; } $message = strip_tags($_POST['message']); echo "Votre message: ".$message; $messagee = remplacement_mots($message,$array_insultes); $messageee = str_ireplace($chaine," **** ",$messagee,$combien); // Connexion à la BDD ect ...
Il me retourne ceci:
Warning: trim() expects parameter 2 to be string, array given in *** Warning: in_array() expects at least 2 parameters, 1 given in ***
Je n'ai jamais utilisé ces fonctions et j'ai fouillé dans le manuel php mais je ne comprends pas ...
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
7 janv. 2013 à 18:49
7 janv. 2013 à 18:49
les parenthèses ne sont pas au bon endroit et laisses la fonction strtolowwer pour forcer la chaine en minuscule pour la comparaison avec les valeurs de l'array:
if(in_array(trim(strtolower($array_chaine[$i])),$array_insultes)){
Bonjour,
ça fonctionne nickel !
C'est vrai que je n'avais pas vu les parentheses.
Code complet pour ceux que ça interesse
ça fonctionne nickel !
C'est vrai que je n'avais pas vu les parentheses.
Code complet pour ceux que ça interesse
<?php session_start(); $array_insultes=array("toutes les insultes en veux-tu en voilà"); function remplacement_mots($chaine,$array_insultes){ $array_chaine=explode(' ',$chaine); for($i=0;$i<sizeof($array_chaine);$i++) { if(in_array(trim(strtolower($array_chaine[$i])),$array_insultes)) { $array_chaine[$i]='****'; } } $chaine_r = implode(' ',$array_chaine); return $chaine_r; } $message = strip_tags($_POST['message']); $messagee = remplacement_mots($message,$array_insultes);