Aller au contenu

[PHP]preg_replace qui a un comportement embetant


afbilou

Messages recommandés

Bonjour a toutes et a tous :)

Un petit probleme avec la fonction PHP preg_replace.

function parse($msg)
{
$tab = array(
"'\n'"       => "<br />",
"'(http://[^ ]+)'"	=> "<a href=\"$1\" target=\"_blank\">$1</a>",
"':\)'"        => "<img src=\"smiley/2.gif\"/>",
"':\('"        => "<img src=\"smiley/5.gif\"/>",
"':D'"       => "<img src=\"smiley/3.gif\"/>",
"':p'"       => "<img src=\"smiley/7.gif\"/>",
"':/'"        => "<img src=\"smiley/6.gif\"/>",
"':o'"       => "<img src=\"smiley/1.gif\"/>"
);

return(preg_replace(array_keys($tab) , array_values($tab) , $msg));
}

Je viens d'ecrire cette fonction parse a laquelle je fournis un texte en argument pour recuperer en sortie le meme texte avec cependant les smileys ecrits en texte remplaces par leur equivalent en image ainsi que les liens rendus cliquables avec l'insertion de la balise <a>. Rien de bien compliqué ...

Cependant elle ne fonctionne pas tout a fait.

Si mon texte comporte un lien du genre http://aaa.fr j'aurais bien un remplacement en : <a href="http://aaa.fr">http://aaa.fr</a>. Mais ensuite les :/ contenus dans http:// vont etre interpretes comme le smiley :/ ! Comportement fortement génant !

Il y a t il un moyen ou une fonction equivalente qui ne va pas reinterpreter une chaine qui vient de subir une operation de remplacement ? (peut-etre un parametre a donner a preg_replace) ?

Si je reste un peu bloqué sur ce probleme c'est parce ke je tiens a utiliser la fonction preg_replace plutot qu'une autre : deja parce qu'elle permet d'utiliser des tableaux en arguments (la saisie des masques et chaines de remplacements est plus lisible et facile) et ensuite parce qu'elle permet de faire des traitement sosphistiqués (notemment appel de fonction) sur les chaines de remplacement ... et j'en aurais besoin par la suite =)

Merci d'avoir pris le temps de se pencher sur le probleme :yes:

Lien vers le commentaire
Partager sur d’autres sites

Ben a premiere vue moi je les entrerais plutot :

"^:\\)$"

"^:\\($"

... etc

^ Commence par :

$ Termine par \ (doublé vu que c'est un slash)

non ? (j'ai pas le temps d'essayer mais essaye)

P.S. va faire un tour sur un tuto pour les expressions régulières, ca t'aideras vachement.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...