Regex = prise de tête ?

Regex = prise de tête ? - PHP - Programmation

Marsh Posté le 28-04-2004 à 18:34:35    

Bonjour,
 
 Je souhaite, à partir d'un contenu html que j'ai stocké dans une variable, transformer le contenu des balises liens.
 Exemple:
 Si j'ai  
 <a href="page.php?var=valeur&var2=valeur2" class="lien1">
 Je voudrais obtenir :  
 <a href="?action=foo&link=<? echo urlencode("page.php?var=valeur&var2=valeur2" ); ?>" class="lien1">
 de façon à ce que le navigateur ne se mélange pas les pinceaux...
 
 A priori la solution est dans les regex avec notament la fonction preg_replace()
 J'ai donc essayé ça :
 $contents = preg_replace_callback('`href="([^>].*)" `', 'encodeUrl', $contents);
 avec encodeUrl :
 function encodeUrl($masque)
 {
 if(eregi("javascript",$masque[1])) return $masque[0];
 return 'href="?action=forum&link='.urlencode($masque[1]).'"';
 }
 
 Mais le problème est le suivant: preg_replace ne s'arrette pas au premier " trouvé mais au troisième, c'est à dire qu'il prend le class="lien1" au passage.
 Si quelqu'un a une idée...
 
 Toujours au niveau des regex, j'ai quelques questions,
 - Pourquoi devoir mettre ` au debut et la fin du masque ? (ça marche pas sinon)
 - Est ce la meme syntaxe pour les fonctions preg (issues de perl apparemment) que pour les fonction ereg et cie ?
 - Ou peut on trouver de la bonne doc sur la question ?
 
 Merci d'avance :)

Reply

Marsh Posté le 28-04-2004 à 18:34:35   

Reply

Marsh Posté le 28-04-2004 à 18:43:12    

Perso, les regex je trouve ca plus qu'obsucre. Je ne vais donc pas répondre à ton problème, sauf pour la dernière question : je suis récemment tombé sur ce site qui m'a l'air pas mal du tout  http://www.expreg.com/


Message édité par gooopil le 28-04-2004 à 18:43:55
Reply

Marsh Posté le 28-04-2004 à 18:44:58    

[:le kneu] T'as pas plus compliqué ? :D
T'as pensé à faire directement appel aux fonctions d'encodage URL de PHP plutôt que de le faire avec Javascript ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 28-04-2004 à 18:45:19    

j'ai deja été voir mais merci quand meme

Reply

Marsh Posté le 28-04-2004 à 18:47:32    

Taiche : quoi javascript ? ou tu vois du javascript ? la fonction encodeUrl est en php et preg_replace_callback aussi
et non j'ai pas plus compliqué, c'est deja pas mal chaud comme ça :)

Reply

Marsh Posté le 28-04-2004 à 18:52:38    

Ba alors j'pige pas c'que tu veux faire [:spamafote]
T'as <a href="page.php?var=valeur&var2=valeur2" class="lien1"> dans une variable. Bon. Tu peux effectivement te faire chier avec les regexp et tomber sur le genre de problème que t'as déjà. Tu peux aussi récupérer la valeur de href via une manipulation de chaînes avec des fonctions de base genre strpos() et substr(). Y en a pour 3 lignes à tout péter et hop.
Genre :
$hrefStart = strpos($var, "href=\"" ) + strlen(href=\" );
$hrefStop = strpos($var, "\"", $hrefStart);
$url = substr($var, $hrefStart, $hrefStop - $hrefStart);
Et pis t'encodes le tout et pis vala [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 28-04-2004 à 18:58:02    

le problème c'est que dans ma variable j'ai pas seulement une balise isolée mais une page web entière

Reply

Marsh Posté le 28-04-2004 à 18:59:56    

[:totoz] Ba amuse-toi bien, alors :D


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 28-04-2004 à 19:01:01    

Merci quand même ;)

Reply

Marsh Posté le 28-04-2004 à 19:04:16    

Ah ouais, sinon, juste un truc sur les patterns de regexp : ne dis pas là où tu veux t'arrêter mais plutôt ce que tu ne dois pas checker. Dans ton cas, tente plutôt un [^\"] ou quelque chose du style. Un truc pour dire "prends tout ce qui n'est pas un guillemet", quoi :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 28-04-2004 à 19:04:16   

Reply

Marsh Posté le 28-04-2004 à 19:10:36    

Ok ca marche mais sans le "

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed