Remplacer les urls par liens cliquable php

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. je crois que dans ta regex tu ne lui dis pas quel est le dernier caractère
    1
    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
      1. 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. 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. je suis pas doué je voulais dire ^^!
          0
        3. 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. 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
      2. c'est très important si vous pouvez m'aidez !! merci !!
        -1