Une drôle de chose avec preg_replace

Petit nouveau ! | 7 Messages

03 févr. 2014, 21:04

Bonjour à vous,

Je me heurte à un soucis qui m'étonne forcement.
Soit un texte possédant des tags que je voudrais traiter en fonction de leur syntaxe et de l'environnement.

Je traite les href grace à preg_replace
et comme je veux gérer l'affichage final en fonction de plusieurs critères j'y introduit une autre fonction Lien
function NettoyageTexte($var) {
$var = preg_replace("#href=\"([^\"]*)\"#",Lien('${1}'),$var);
return $var;
}

Ma fonction Lien
function Lien($cible) {
if (preg_match("#mailto#i",$cible)==1) $resultat = "href=\".$cible."\"";
else echo $resultat = "href=\"javascript:javascript:this.location='$cible'\"";
echo $resultat;
}

Le problème c'est que la fonction preg_match ne filtre rien du tout car $cible n'est pas le résultat mais "${1}"
donc preg_match("#mailto#i",$cible) est toujours égal à 0

Donc étonnamment ${1} n'est pas converti en résultat mais reste ${1}, sauf au final comme si RETURN changeait tout car j'ai bien <a href="javascript:this.location='certificat-laboratoire.php'" target="_self"> qui s'affiche.

Donc je sèche complètement sur le pourquoi ${1} n'est pas "traduite" lorsqu'elle est envoyée dans la fonction Lien() et comment je peux faire pour que Lien puisse tester ce qu'on lui envoi.

Si vous avez des pistes je suis preneur.

Merci d'avance



Serveur Linux
Apache
PHP Version 5.3.25

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

06 févr. 2014, 00:14

salut,

la je dirais que la fonction lien est évalué avant utilisation de preg_replace.

utilise plutot preg_replace_callback

@+
Il en faut peu pour être heureux ......