Preg_replace déconne

Résolu
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 - 28 avril 2010 à 17:52
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 - 29 avril 2010 à 15:28
Bonjour tout le monde,

J'ai un problème étrange... je ne sais pas si juste moi qui est fatigué mais bon.

Je veux créer un lien pour changer de langue dans mon site.

	$url = array('http://www.gogle.com/?l=fr', 'http://www.gogle.com/?l=eng');
$pat = array('/l\=eng/', '/l\=fr/');
$rep = array('l=fr', 'l=eng');
echo preg_replace($pat, $rep, $url[0]),"
";
echo preg_replace($pat, $rep, $url[1]),"
";

voici le résultat que j'obtient :
http://www.gogle.com/?l=eng
http://www.gogle.com/?l=eng

la question est pourquoi est-ce que mon preg_replace ne traduit pas le 2e pattern ($pat[1])?


---------------------------------------------------------
Julien B.

3 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 avril 2010 à 21:47
Salut Zen69,

J'ai un problème étrange... je ne sais pas si juste moi qui est fatigué mais bon.

Peut être l'es tu, mais ce "problème" n'est pas si étrange.

Tentative d'explication :

<?php
$url = 'http://www.gogle.com/?l=eng'; // ou $url[1], c'est juste pour simplifier
$pat = array('/l=eng/', '/l=fr/');
$rep = array('l=fr', 'l=eng');
echo preg_replace($pat, $rep, $url),"
";
?>


Ce qu'il se passe dans le preg_replace :
La fonction recherche le masque "l=eng" ($pat[0])
elle le trouve et le remplace par "l=fr", la chaine résultante est donc :
http://www.gogle.com/?l=fr
elle passe à l'index 1 du tableau $pat pour chercher le masque 'l=fr'
le problème c'est qu'en interne $url n'est plus égal à 'http://www.gogle.com/?l=eng' mais à 'http://www.gogle.com/?l=fr' (remplacement précédent)
elle trouve donc le masque 'l=fr' et le remplace par $rep[1], soit :
http://www.gogle.com/?l=eng

En espérant avoir été clair ...

Cordialement,

Kohntark -
3
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
29 avril 2010 à 15:26
Kohntark : Merci, tu as bien vu, c'est exactement ça le problème.

C'est peut-être un peu moins propre... mais voici comment j'ai régler le problème :
$pat = array('/l\=eng/', '/l\=fr/');
//$rep = array('l=fr', 'l=eng');
$rep = array('l=fr', 'l=eng');
$lang_url = preg_replace($pat, $rep, $lang_url);

** Cette solution peut ne pas être bonne dans une situation différente.


---------------------------------------------------------
Julien B.
0
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
29 avril 2010 à 15:28
J'ai oublié de mettre mon code dans un objet code.

$pat = array('/l\=eng/', '/l\=fr/');
$rep = array('l=&#102;&#114;', 'l=&#101;&#110;&#103;');
$lang_url = preg_replace($pat, $rep, $lang_url);


N'est-ce pas plus clair comme ceci ? :P


---------------------------------------------------------
Julien B.
0
Rejoignez-nous