Remplacer les urls par liens cliquable php

Fermé
nightmare - 19 nov. 2011 à 14:25
 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 :)


A voir également:

6 réponses

vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
21 nov. 2011 à 12:54
je crois que dans ta regex tu ne lui dis pas quel est le dernier caractère
1
"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 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
21 nov. 2011 à 16:09
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 nov. 2011 à 16:22
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
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
je suis pas doué je voulais dire ^^!
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 nov. 2011 à 09:56
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
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
un coup de main :)
0
c'est très important si vous pouvez m'aidez !! merci !!
-1