Problème avec une regex

Eléphant du PHP | 53 Messages

30 mai 2007, 09:22

Salut à tous!

Voilà j'ai fait un expression régulièreafin de pouvoir rajouter des arguments à des href dans du code HTML.

En gros avec

Code : Tout sélectionner

"/<a href=[\"'](.*?)[\"'](.*?)<\/a>/si"
comme regex et

Code : Tout sélectionner

'<a href="$1?utm_source=google&utm_medium=mail&utm_campaign='
comme motif de remplacement je peux faire du tracking ^^

mais le problème est que si un autre attribut (target, class; etc) est placé après le '<a' là ça marche plus..

N'étant pas dans un état acceptable pour réfléchir (suis malade) je fais appel à vous pour m'aider.

En gros, j'aimerais que quelque soit l'ordre des attributs dans la balise <a>, je puisse rajouter des arguments à l'URL

Ex :

<a target='_blank' href='mapage.php'>blabla</a>

devienne

<a target='_blank' href='mapage.php?utm_source=google&utm_medium=mail&utm_campaign='>blabla</a>

merci!! :wink:

Eléphant du PHP | 63 Messages

05 juin 2007, 03:32

$query_array = parse_str($query_string) ;
$query_array['foo'] = 'bar' ;
$query_string = http_build_query($query_array) ;

Mammouth du PHP | 505 Messages

05 juin 2007, 09:23

Je dois avouer que j'ai du mal a saisir la réponse d'elvex... Trompage de thread ?

Bidibule, les problèmes de regex sont récurent et particulièrement les problème de parsing de balise html et de leurs attributs. Une petite recherche dans le forum t'aurai donné pas mal d'indication.

Dans le cas présent, je ne pense pas que les regex soit le meilleur moyen de répondre a ton problème.
le DOM est bien plus adapté

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 juin 2007, 09:27

$query_array = parse_str($query_string) ;
$query_array['foo'] = 'bar' ;
$query_string = http_build_query($query_array) ;
J'adore ce genre de réponse ... :evil:

J'espère juste que Bidibule est assez connaisseur pour comprendre un code sans commentaire, sans explications ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer