Bonjour, je ne suis pas un spécialiste de Preg_replace et je rencontre quelques problèmes avec cette fonction php.
Voilà mon cas :
J'ai un tableau de chaines en minuscules qui peuvent être composées de un où plusieurs mots.
J'ai un texte contenant les mots du tableau cité avant.
$string='bla bla blabla blabla Mot1 blabla blabla blabla mot2 mot3 blabla blabla blabla blabla Mot4 blabla blabla blabla blabla blabla bla mot4';
Dans ce texte les mots peuvent être en majuscules contrairement à ceux du tableau qui ne sont qu'en minuscules (je précise l'histoire des majuscules et minuscules juste pour justifier l'utilisation de preg_replace et non str_ireplace car au final je veux garder les majuscules du texte s'il y en avait, après remplacement. Mais ce n'est pas là le problème)
Je voudrais donc remplacer dans le texte les mots (du tableau) par des url pour que celà donne :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
J'ai testé deux solutions (voir le code ci-dessous) qui ont visiblement le même effet. Elles fonctionnent bien sauf pour le cas de $tab[2] et $tab[3] où la chaine 'mot3' est contenue dans les deux éléments du tableau. Je présume qu'il remplace deux fois la chaine 'mot2 mot3' de mon texte à cause de $tab[2] et $tab[3] ce qui fout une grosse pagaille.
Si l'ordre de $tab[2] et $tab[3] doit changer je voudrais que le texte ne soit changé qu'une seule fois et donc que je me retrouve soit avec :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
soit :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla mot2 <a href="http://url.com/mot3">mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
Voilà les deux fonctions utilisées (...et qui ne marchent pas pour mon cas )
Merci d'avance
Voilà mon cas :
J'ai un tableau de chaines en minuscules qui peuvent être composées de un où plusieurs mots.
Code:
$nbOcc=4;
$tab[1]='mot1';
$tab[2]='mot2 mot3';
$tab[3]='mot3;
$tab[4]='mot4';
$string='bla bla blabla blabla Mot1 blabla blabla blabla mot2 mot3 blabla blabla blabla blabla Mot4 blabla blabla blabla blabla blabla bla mot4';
Dans ce texte les mots peuvent être en majuscules contrairement à ceux du tableau qui ne sont qu'en minuscules (je précise l'histoire des majuscules et minuscules juste pour justifier l'utilisation de preg_replace et non str_ireplace car au final je veux garder les majuscules du texte s'il y en avait, après remplacement. Mais ce n'est pas là le problème)
Je voudrais donc remplacer dans le texte les mots (du tableau) par des url pour que celà donne :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
J'ai testé deux solutions (voir le code ci-dessous) qui ont visiblement le même effet. Elles fonctionnent bien sauf pour le cas de $tab[2] et $tab[3] où la chaine 'mot3' est contenue dans les deux éléments du tableau. Je présume qu'il remplace deux fois la chaine 'mot2 mot3' de mon texte à cause de $tab[2] et $tab[3] ce qui fout une grosse pagaille.
Si l'ordre de $tab[2] et $tab[3] doit changer je voudrais que le texte ne soit changé qu'une seule fois et donc que je me retrouve soit avec :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
soit :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla mot2 <a href="http://url.com/mot3">mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
Voilà les deux fonctions utilisées (...et qui ne marchent pas pour mon cas )
Code:
for ($i=1; $i<=$nbOcc; $i++)
{$pattern = '/( '.$tab[$i].' )/i';
$string = '<a href="http://url.com/'.$tab[$i].'" >$1</a>';
$string=preg_replace($pattern, $replacement, $string);
}
Code:
$pattern = array();
$replacement = array();
for ($i=1; $i<=$nbOcc; $i++)
{$pattern[$i]='/('.$tab[$i].')/i';
$replacement[$i] = '<a href="http://url.com/'.$tab[$i].'" >$1</a>';
}
$string=preg_replace($pattern, $replacement, $string);
Merci d'avance