[PHP] Regex anti insultes
NoSpe
-
NoSpe -
NoSpe -
Bonjour,
Je voudrais une regex anti insulte pour un traitement de données de "tchat" en ligne.
J'ai trouvé plusieurs choses mais je ne sais pas laquelle est la bonne:
Sachant que je veux remplacer tous ces gros mots par des ***** (toujours 5 astérisques)
Exemples pour plusieurs phrases:
Mon code serait donc
Merci d'avance pour vos réponses !
Je voudrais une regex anti insulte pour un traitement de données de "tchat" en ligne.
J'ai trouvé plusieurs choses mais je ne sais pas laquelle est la bonne:
#^con$|^cul$|^bite$#i ou #^con|cul|bite$#i ou #^[con|cul|bite]$#i
Sachant que je veux remplacer tous ces gros mots par des ***** (toujours 5 astérisques)
Exemples pour plusieurs phrases:
Je veux un conseil => Je veux un conseil Je suis un con => Je suis un ***** J'ai un cul d'enfer => J'ai un ***** d'enfer J'ai une culasse à changer => J'ai une culasse à changer
Mon code serait donc
$grosmots = " la regex que je cherche "; $antigrosmots = "#*****#"; $phrase = $_POST['message']; preg_replace = ($grosmots, $antigrosmots, $phrase)
Merci d'avance pour vos réponses !
A voir également:
- [PHP] Regex anti insultes
- Malwarebytes anti-malware - Télécharger - Antivirus & Antimalwares
- Easy php - Télécharger - Divers Web & Internet
- Anti pub youtube - Accueil - Streaming
- Anti slash windows ✓ - Forum Clavier
- Panda anti virus gratuit - Télécharger - Antivirus & Antimalwares
7 réponses
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)
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 !
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);
?>
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 ...
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);