Partage
  • Partager sur Facebook
  • Partager sur Twitter

Regexp d'un lien hypertexte

caractère non voulu inséré dans la chaîne

    18 février 2007 à 21:05:12

    Bonjour à tous

    je viens de me remettre récemment au PHP, et là j'en suis à étudier les regexp. J'ai tenté de faire une regexp simpliste: remplacer toute chaine commençant par "http://" par un lien cliquable. Ce qui donne le code:
    $ch = preg_replace('#http://(.+) #S', '<a href="http://$1">http://$1</a>', $ch);

    Logiquement (et c'est ce qui se passe), la regexp devrait sélectionner toute la chaîne entre le "http://" et le premier espace rencontré; or, l'adresse n'est pas nécessairement suivie d'un espace: si c'est un retour à la ligne, on se retrouve avec ce code html:
    <a href="http://url_de_test%3Cbr">http://url_de_test<br></a>/&gt;

    ce qui équivaut à ceci dans l'affichage de la page:
    http://url_de_test
    /> suite

    Avouez que ça fait plutôt maladroit :-° Quelqu'un a-t-il une solution? Comment s'arrêter au premier espace OU au premier saut de ligne?
    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2007 à 22:11:56

      $ch = preg_replace('#http://(.+)[^!~~]#SU', '<a href="http://$1">http://$1</a>', $ch);


      Si je ne me trompe pas, cela veux dire : "Tout ce qui est entre http:// et un caractère non-affichable". (espace, retour à la ligne, tabulation ...).

      J'me suis aidé du tableau qui est tout en bas de la page http://www.asp-magazine.com/article-122.html . Inspire toi en si je me suis trompé. ;)

      Bonne chance.
      • Partager sur Facebook
      • Partager sur Twitter

      Regexp d'un lien hypertexte

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown