Regex = prise de tête ? - PHP - Programmation
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/
Marsh Posté le 28-04-2004 à 18:44:58
T'as pas plus compliqué ?
T'as pensé à faire directement appel aux fonctions d'encodage URL de PHP plutôt que de le faire avec Javascript ?
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
Marsh Posté le 28-04-2004 à 18:52:38
Ba alors j'pige pas c'que tu veux faire
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
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
Marsh Posté le 28-04-2004 à 18:59:56
Ba amuse-toi bien, alors
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
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