Remplacer les urls par liens cliquable php [Fermé]

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


6 réponses

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

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

CCM 76687 internautes nous ont dit merci ce mois-ci

"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
1682
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
279
Messages postés
3659
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
26 novembre 2020
977
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 ^^!
Messages postés
3659
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
26 novembre 2020
977
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
un coup de main :)
c'est très important si vous pouvez m'aidez !! merci !!