captain_torche Posté 22 Novembre 2006 Posté 22 Novembre 2006 Bonjour à tous ! Je cherche à parser diverses urls dans un document, et éventuellement remplacer les esperluettes simples (&) par &. Jusqu'ici, pas de souci, mais je n'arrive pas à ne pas capturer les &, ce qui fait que dans ce cas, je me retrouve avec des &, ce qui est fort désagréable. Quelqu'un connaîtrait-il une astuce ?
captain_torche Posté 22 Novembre 2006 Auteur Posté 22 Novembre 2006 Bon, je me réponds tout seul Il faut utiliser les assertions négatives (Tutoriel trouvé sur http://www.lumadis.be/regex/tuto_pcre.php#look, à garder en favoris) $test = '<a href="http://www.site.com?rubrique=1&article=15&test=test">Lien de test</a>';$reg_amp = '#&(?!amp;)#';$test = preg_replace($reg_amp, '&', $test);echo $test;
TheRec Posté 22 Novembre 2006 Posté 22 Novembre 2006 Bonjour, En mettant le code que tu as déjà réalisé tu auras certainement une réponse qui collera plus à ce que tu attends Maintenant tu peux éventuellement convertir tous les & en simple & avant de commencer le remplacement des autres &... ce n'est peut-être pas la solution la plus optimisée, mais c'est une solution tout de même (du moins si j'ai bien compris ce que tu souhaites). Sinon il faut peut être regarder du côté des "Assertions", tu as une explication complète sur la syntaxe dans le manuel PHP. Bonne chance. *EDIT* Ben grillé quoi
Dan Posté 22 Novembre 2006 Posté 22 Novembre 2006 Le problème avec ces approches est qu'elles vont convertir é en é ... qui ne sera pas correctement interprété par les navigateurs. Mais comme ce é n'est pas supposé se trouver dans une URL, ce sera bon... mais uniquement pour les URLs.
TheRec Posté 22 Novembre 2006 Posté 22 Novembre 2006 C'est justement le problème qu'on résoud avec les assertion dans l'expression régulière... l'assertion sert à vérifier que les caractères avant ou après (selon la syntaxe) correspondent au sous-masque avec lequel elle est liée En l'occurence on vérifie que ce qui se trouve après "&" ne correspondent pas à "amp;". Mais effectivement si il y a d'autre autres entités HTML qui se trouvent dans le document, elles verront leur "&" remplacée par "&"... et c'est selon le premier message de captain_torche ce dont il avait besoin. S'il faut prendre en compte toutes les entités ça va devenir plus difficile
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant