Perdue avec preg_replace et quote dans un texte capturé

nellyy
Invité n'ayant pas de compte PHPfrance

27 août 2007, 16:03

Bonjour, j'ai un pbm un peu technique. J'utilise preg_replace et je capture un texte qui contient une apostrophe or ce texte capturé je le place dans une fonction en javascript. Du coup cet apostrophe est interpreté comme un quote et ça fait planter ma fonction en javascript. Comment je peux remplacer ce ' par \' ? J'ai essayé un addslashes mais ça ne change rien...

Mon extrait(c'est une version simplifiée pour comprendre):
$pattern = '/<a (.*?) >/';     
$replacement = '<a ONMOUSEOVER="montrele(\'$3\');" >';
$buffer = preg_replace($pattern, $replacement, $buffer);
Mon extrait avec addslashes ais qui ne change rien :
$pattern = '/<a (.*?)>/';     
$replacement = '<a ONMOUSEOVER="montrele(\''.addslashes('$3').'\');" >';
$buffer = preg_replace($pattern, $replacement, $buffer);
Merci à ceux qui pourront me secourir!!

Nellyy
Invité n'ayant pas de compte PHPfrance

27 août 2007, 16:04

Je voulais dire $1 et pas $3 bien sûr

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 août 2007, 16:19

En effet, cela ne fonctionne pas comme ça... actuellement, le addslash est effectué sur $1 avant que la variable ne soit remplacée. Pour que l'appel à la fonction s'effectue lors du remplacement il te faut utiliser l'option e (comme eval) et faire le remplacement par une chaine de caractère qui sera évaluée en php :
pattern = '/<a (.*?) >/e'; 
$replacement = "'<a ONMOUSEOVER=\"montrele(' . addslashes('$1') . ');\" >'"; 
A tester, mais en gros, ça doit être un truc comme ça :)

http://us.php.net/manual/fr/reference.p ... ifiers.php

PS : pense à utiliser les balises [ php ] lorsque tu postes du code :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

27 août 2007, 16:38

merci beacoup mais.... ça provoque un autre problème : il y a un autre texte capturé $2 qui doit rester intact or le /e rajoute un \ devant chaque " qui sont dans $2. Comment je peux éviter ce problème s'il te plait?

Nelly
Invité n'ayant pas de compte PHPfrance

28 août 2007, 23:08

Ca marche en définitive avec preg_replace_callback. Merci pour ton aide(je vais poster un autre message pour un nouveau probleme)