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

6 réponses

  1. vordano Messages postés 1981 Statut Membre 316
     
    je crois que dans ta regex tu ne lui dis pas quel est le dernier caractère
    1
  2. 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
  3. Reivax962 Messages postés 3742 Statut Membre 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
    1. 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
    2. nightmare
       
      je suis pas doué je voulais dire ^^!
      0
    3. Reivax962 Messages postés 3742 Statut Membre 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
    4. 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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. nightmare
     
    c'est très important si vous pouvez m'aidez !! merci !!
    -1