Remplacer les urls par liens cliquable php

nightmare -  
 nightmare -
Bonjour,

tout est dans le titre je souhaite remplacer les urls dans les chaines par des liens cliquables alors j'ai utilisé :

$str=preg_replace("#(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?#i","<a href='\\0' target='_blank'>\\0</a>",$str);

le problème c'est que les urls et toute la suite de la ligne et remplacer par lien cliquable

ex:
http://www.blablabla.com blablabla

toute cette ligne sera remplacée par un lien cliquable

est ce une erreur dans la regex ?

si quelqu'un a une solution merci de m'aider :)


A voir également:

6 réponses

vordano Messages postés 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
je crois que dans ta regex tu ne lui dis pas quel est le dernier caractère
1
nightmare
 
"je crois que dans ta regex tu ne lui dis pas quel est le dernier caractère
"

merci pour ta réponse.

je veux qu'elle s'arrête une fois qu'elle rencontre un espace !!

comment deverai-je faire ceci ?
0
vordano Messages postés 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Je n'ai pas tout compris à ton expression rationnelle, mais je crois avoir trouvé le soucis.
En la décomposant :
#
(http|https|ftp)
://
(
	[A-Z0-9][A-Z0-9_-]*
	(?:.[A-Z0-9][A-Z0-9_-]*)+
)
:?(d+)?/?
#i

on constate à la 6ème ligne un point « . » qui à mon avis ne devrait pas être là. Je pense que c'est lui qui laisse passer l'espace... Si c'est pour récupérer les / ou les %, il faudrait les mettre spécifiquement.

Sinon, tu peux m'expliquer la dernière ligne de ton expression ? C'est pour le port ? Dans ce cas elle est mal placée, car le port est spécifié à la suite du nom de domaine et non de l'URL entière, et il manque un \ devant « d »...

Xavier
0
nightmare
 
en fait c'est uu tuto que j'ai trouvé ici sur ccm http://www.commentcamarche.net/faq/891-php-transformer-une-url-en-lien-hypertexte-cliquable

je suis doué avec les regex et je sais pas vraiment ce qu'il faut changer pour que ça marche!!
0
nightmare
 
je suis pas doué je voulais dire ^^!
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Essaie ça (en enlevant les retours à la ligne et les espaces) :

#
(http|https|ftp)
://
(
([A-Z0-9][A-Z0-9_-]*\.?){2,}
(:\d+)?/?
(?:[A-Z0-9\._-/]*)
)

#i

Xavier
0
nightmare
 
merci pour l'aide mais il me renvoi l'erreur: Warning: preg_replace() [function.preg-replace]: Compilation failed: range out of order in character class at offset
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nightmare
 
un coup de main :)
0
nightmare
 
c'est très important si vous pouvez m'aidez !! merci !!
-1