Bonjour.

J'ai écris une fonction pour censurer des mots à partir d'un texte (en les remplaçant un nombre d'étoiles égale à la longueur du mot 'matché').


J'ai réussi à le faire d'une manière statique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
function censure($texte) {
 $badwords = array("#sex#i", "#p(ro|or)n#i");
 $replace = array("***", "****");
 
 $texte = preg_replace($badwords, $replace, $texte);
 
 return $texte;
}

Seulement j'aurais préférer trouver une manière dynamique, pour éventuellement interfacer cela avec une BDD.

Voici ce que j'ai tenté de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
function censure($texte) {
 $badwords = array("#(sex)#i", "#(p(ro|or)n)#i");
 
 for ($i = 0; $i < count($badwords); $i++)
   $texte = preg_replace($badwords[$i], str_repeat("*",strlen('$1')), $texte);
 
 return $texte;
}
Mais là il me remplace les 'badwords' par seulement deux étoiles. Je me dis alors qu'il n'interprète pas comme il faut le $1. Ceci est probablement dû à l'appel au deux fonction str_repeat() et strlen().

Voilà! Pour infos, j'ai réussi à coller mon prof d'info avec cette question >.<


Des idées? :)