Remplacer les urls par liens cliquable php [Fermé]

- - Dernière réponse :  nightmare - 22 nov. 2011 à 13:00
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 :)


Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
1719
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
237
1
Merci
je crois que dans ta regex tu ne lui dis pas quel est le dernier caractère

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 64132 internautes nous ont dit merci ce mois-ci

0
Merci
"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 ?
Messages postés
1719
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
237
Messages postés
3526
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
4 décembre 2019
917
0
Merci
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
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!!
je suis pas doué je voulais dire ^^!
Reivax962
Messages postés
3526
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
4 décembre 2019
917 -
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
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
Merci
un coup de main :)
-1
Merci
c'est très important si vous pouvez m'aidez !! merci !!