Lister et dédoublonner les mots bannis d'un texte

  • Auteur de la discussion Auteur de la discussion KOogar
  • Date de début Date de début
WRInaute accro
Bonjour,

J'ai créer un filtre pour ressortir la liste des mots bannis d'une texte. J'en profite pour vous le donner.
Simple: d'un coté le texte et de l'autre la liste de mots bannis/
Reste encore un bug -> Le code fonctionne trés bien mais des que j'essaye de passer ce code dans une fonction, cela ne fonctionne plus du tout.

Une idée ?


Code:
<?php

$tb_m_b = 'je|tu|il|ils|elle|elles';
$titre = "Je suis avec elle pour elle meme!";

function liste_mots_bannis_et_deboublonne($titre) {
$x=0;
$tab_invalide = array();
// passe le texte en minuscule
$titre = strtolower($titre);
// passe la chaine en tableau
$titre_tab = split("[^[:alpha:]]+", $titre);
// ressort la liste des mots interdits
foreach($titre_tab as $v)  {
       $tab_invalide[$x] .= ''.(ereg('('.$tb_m_b.')', $v) ? '-'.$v.' ' : '').'';
       $x++; }
// dedoublonne
$tab_invalide = array_unique($tab_invalide);
// passe le tableau en chaine
foreach($tab_invalide as $b)  $tab_final_invalide .= ''.$b.'';
// le resultat est dans $tab_final_invalide
   return $tab_final_invalide;
   }

if(ereg('('.$tb_m_b.')',$titre))
 {  echo 'Mots non autorisés: ('.liste_mots_bannis_et_deboublonne("$titre").')<br />';
 }

?>

affiche:
Mots non autorisés: (-Je -suis -avec -pour -elle -meme - )

Ne fonctionne pas puisque cela retourne la liste de tout les mots

Code:
<?php

$tb_m_b = 'je|tu|il|ils|elle|elles';
$titre = "Je suis avec elle pour elle meme!";

$x=0;
$tab_invalide = array();
// passe le texte en minuscule
$titre = strtolower($titre);
// passe la chaine en tableau
$titre_tab = split("[^[:alpha:]]+", $titre);
// ressort la liste des mots interdits
foreach($titre_tab as $v)  {
       $tab_invalide[$x] .= ''.(ereg('('.$tb_m_b.')', $v) ? '-'.$v.' ' : '').'';
       $x++; }
// dedoublonne
$tab_invalide = array_unique($tab_invalide);
// passe le tableau en chaine
foreach($tab_invalide as $b)  $tab_final_invalide .= ''.$b.'';
// le resultat est dans $tab_final_invalide


if(ereg('('.$tb_m_b.')',$titre)) { echo 'Mots non autorisés: ('.$tab_final_invalide.')<br />';
 }
?>

affiche:
Mots non autorisés: (-je -elle )

Ce code par contre fonctionne trés bien.
 
WRInaute passionné
Ta variable $tb_m_b est global. Sauf que dans ta fonction, si tu veux y acceder comme une variable globale, tu dois l'indiquer à php en mettant dans ta fonction la ligne :
GLOBAL $tb_m_b;
Sinon, php supoose que ta variable $tb_m_b est locale, et donc elle est vide.
 
WRInaute accro
j'espere qui t'en reste encore tout un pack pour WRI, car moi me reste encore quelque matins à faire la tete dans le sac ;)
 
WRInaute passionné
KOogar a dit:
j'espere qui t'en reste encore tout un pack pour WRI, car moi me reste encore quelque matins à faire la tete dans le sac ;)

Un pack de BA ? Tu rêve ! J'ai même pas été nominé pour le "meilleur wrinaute de l'année", donc je refuse de rendre encore service ! :-)
 
WRInaute passionné
arnaudmn a dit:
KOogar a dit:
j'espere qui t'en reste encore tout un pack pour WRI, car moi me reste encore quelque matins à faire la tete dans le sac ;)

Un pack de BA ? Tu rêve ! J'ai même pas été nominé pour le "meilleur wrinaute de l'année", donc je refuse de rendre encore service ! :-)

Je te note sur mes tablettes. Pour dans un an s'il y a le même challenge.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut