Forum Clubic

Remplacer des mot dans une chaine de caractere

Voila, j’ai un probleme tout simple, j’ai une fonction en php, qui permet de changer certain mot, dans une chaine de caractere.

function hyperlien_texte_param ($string,$texte_original,$texte_remplacement)
{
$string = preg_replace('/\b(?<!=["\'])(?<!\/)'.$texte_original.'\b/', $texte_remplacement, $string) ;
return $string ;
}

Si par exemple j’ecrit " php c’est un super langage ".

Cela me donnera "php c’est un super langage ".

Le probleme, c’est que si le mot php, ce retrouve dans une balise, la balise ne fonctionne pas, et tout l’affichage bugg.

Il y aura une solution pour empecher un preg_replace ( ou autre chose ), qui ne scan pas le $texte, quand il est dans une balise ?

Sinon la seul solution que je voit pour le moment, c’est de renommer certaine url, pour que le bugg disparaisse, mais c’est quand meme pas tres viable.

Merci d’avance !

Pour expliquer ta situation et ton problème utilise les balises

 et 

de partout car là j’ai du mal à saisir ce qu’est censé faire ta fonction hyperlien_texte_param().
Edité le 08/08/2008 à 01:51

Ca charge les mot via une base de donnée sql.

Pour reduire le code, cela donne :

$string = preg_replace('/\b(?<!=["\'])(?<!\/)'.$texte_original.'\b/', $texte_remplacement, $string) ;

petit up !

Tu n’y arriveras pas avec simplement preg_replace.

Plutôt, il faut que tu fasse de l’analyse lexicale (ce que fait en partie preg_match), et de l’analyse grammaticale.

En gros, il faut que je dise a mon php :

Tu fait la recherche preg_replace, tant que tu n’est pas dans une balise, c’est ca ?

Non.

Faut que tu reconnaisses des mots (une chaîne, un identifiant, genre , etc) et que tu fasses de l’analyse en fonction.

Zyeute un peu les grammaires algébriques (dont les logiciels bison, yacc, antlr, permettent de faire des analyseurs en C/Java voire PHP avec un peu de chance).

Bien sûr, je ne dis pas de faire une vraie grammaire, mais c’est dans l’idée.