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

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 : Regex - p'tit problème avec les preg_replace()

par Sineljogy » 06 juin 2006, 14:11

$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é...

par jojolapine » 06 juin 2006, 13:22

et la solution c'est laquelle?
ça peut servir à d'autres :wink:

par Sineljogy » 06 juin 2006, 08:49

C'est bon c'est bon.. j'ai un peu réfléchi et j'ai trouvé !!

Merci beaucoup Ryle :)

par Sineljogy » 06 juin 2006, 07:50

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...

par Ryle » 31 mai 2006, 18:25

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 :)

par Sineljogy » 31 mai 2006, 14:15

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>";

par Ryle » 31 mai 2006, 14:08

Tu fais le preg_replace du lien avant de faire celui de l'image ? :)

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

par Sineljogy » 31 mai 2006, 13:49

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 ?