Perdue avec preg_replace et quote dans un texte capturé

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Perdue avec preg_replace et quote dans un texte capturé

par Nelly » 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)

par Invité » 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?

par Ryle » 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 :)

par Nellyy » 27 août 2007, 16:04

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

Perdue avec preg_replace et quote dans un texte capturé

par nellyy » 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!!