Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1673 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Regex = prise de tête ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Regex = prise de tête ?

n°711216
microry
Babylon will get down !
Posté le 28-04-2004 à 18:34:35  profilanswer
 

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 :)

mood
Publicité
Posté le 28-04-2004 à 18:34:35  profilanswer
 

n°711222
gooopil
pfiew
Posté le 28-04-2004 à 18:43:12  profilanswer
 

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
n°711223
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 28-04-2004 à 18:44:58  profilanswer
 

[: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.
n°711224
microry
Babylon will get down !
Posté le 28-04-2004 à 18:45:19  profilanswer
 

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

n°711226
microry
Babylon will get down !
Posté le 28-04-2004 à 18:47:32  profilanswer
 

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 :)

n°711228
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 28-04-2004 à 18:52:38  profilanswer
 

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.
n°711235
microry
Babylon will get down !
Posté le 28-04-2004 à 18:58:02  profilanswer
 

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

n°711239
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 28-04-2004 à 18:59:56  profilanswer
 

[: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.
n°711241
microry
Babylon will get down !
Posté le 28-04-2004 à 19:01:01  profilanswer
 

Merci quand même ;)

n°711247
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 28-04-2004 à 19:04:16  profilanswer
 

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.
mood
Publicité
Posté le 28-04-2004 à 19:04:16  profilanswer
 

n°711257
microry
Babylon will get down !
Posté le 28-04-2004 à 19:10:36  profilanswer
 

Ok ca marche mais sans le "


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Regex = prise de tête ?

 

Sujets relatifs
[PHP] aide sur une regexcalendrier de prise de rdv
Regex : A quand un générateur ?[JAXB] Enlever la balise d'en-tête d'un marshalling
la couleur de transparence n'est pas prise en compte dans mon imageregex
Regex et JavaQue signifie cette regex ?
[PHP & regex] "blabla blabla file.ext?point=444 blabla" Recupérer 444regex : correspondance à une simple liste
Plus de sujets relatifs à : Regex = prise de tête ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR