Page 1 sur 1

Regex - p'tit problème avec les preg_replace()

Posté : 31 mai 2006, 13:49
par Sineljogy
Hello !!

Voilà, je débute dans les Regex et je me suis posé un problème que je ne sais pas comment résoudre...

Je souhaite créer deux choses :
- Qu'une URL devienne automatiquement active lorsqu'elle est entrée
- Que les images s'affichent lorsque j'écrit [ img ] url de l'image [/ img ] (sans les espaces ;))

Mon code donc :
$text = $_POST['text'];

$text = preg_replace("!\[img\](http://[a-z0-9._/-]+)\[/img\]!isU", "<img src='$1' border=0>", $text); //image
$text = preg_replace("!http://[a-z0-9._/-]+!i","<a href=\"$0\" target=\"_blank\">$0</a>",$text); // lien

echo "<table border=1><tr><td>".nl2br($text)."</td></tr></table>";
Donc, avec ce code-là, si je mets une image... il va aussi faire un lien dans le <img src......... donc l'image ne s'affichera pas !!

Comment pourrais-je faire ?

Posté : 31 mai 2006, 14:08
par Ryle
Tu fais le preg_replace du lien avant de faire celui de l'image ? :)

Posté : 31 mai 2006, 14:15
par Sineljogy
Si je fais ça, j'obtiens ceci dans ma page :

Code : Tout sélectionner

[img]<a href="http://www.google.ch/images/logo_sm.gif" target="_blank">http://www.google.ch/images/logo_sm.gif</a>[/img]
J'ai juste inverser comme ceci :
$text = preg_replace("!http://[a-z0-9._/-]+!i","<a href=\"$0\" target=\"_blank\">$0</a>",$text);
$text = preg_replace("!\[img\](http://[a-z0-9._/-]+)\[/img\]!isU", "<img src='$1' border=0>", $text); //image
echo "<table border=1><tr><td>".nl2br($text)."</td></tr></table>";

Posté : 31 mai 2006, 18:25
par Ryle
Arf au temps pour moi, j'ai pas réflechi au fait qu'il te remplaçait l'url dans la balise img égaleent... C'est vrai qu'en général on utilise des [ url ] pour mettre des liens, donc ca simplifie la chose :)

Ce que tu peux essayer de faire, c'est dans ton masque pour reperer les liens, c'est prendre ceux qui ne commencent pas par "[ img ]" voire simplement par "]". Quelque chose du genre :

Code : Tout sélectionner

preg_replace("![^\]]http...
à tester :)

Posté : 06 juin 2006, 07:50
par Sineljogy
Hello! désolé si j'ai fait presque une semaine à répondre...

J'ai essayé ta solution, c'est vrai que c'est une bonne idée mais t'as pas dit juste :P
$text = preg_replace("!\[img\](http://[a-z0-9._/-]+)\[/img\]!isU", "<img src='$1' border=0>", $text); //image
$text = preg_replace("![^src='](http://[a-z0-9._/-]+)!i","<a href=\"$1\" target=\"_blank\">$1</a>",$text);
Mais quelque chose ne fonctionne quand même pas, le premier ne s'active jamais, les autres oui...

Posté : 06 juin 2006, 08:49
par Sineljogy
C'est bon c'est bon.. j'ai un peu réfléchi et j'ai trouvé !!

Merci beaucoup Ryle :)

Posté : 06 juin 2006, 13:22
par jojolapine
et la solution c'est laquelle?
ça peut servir à d'autres :wink:

Posté : 06 juin 2006, 14:11
par Sineljogy
$text = " ".trim($_POST['text'])." ";
$text = preg_replace("![^(src|href)=']((http|https|ftp)://[a-z0-9._/-]+)!i","<a href='$1' target=\"_blank\">$1</a>",$text); // auto lien
$text = preg_replace("![^(src|href)='(http|https|ftp)://](w{3}[\.][a-z0-9._/-]+[\.][a-z0-9._/-]+)!i","<a href='http://$1' target=\"_blank\">$1</a>",$text); //auto lien
on contourne les problèmes comme on peut ;) comme ça, c'est ok pour moi

A noter : le changement est juste à la 1ère ligne, les autres, j'ai juste amélioré...