2009-08-07 4 views
1

Existe-t-il une expression régulière qui peut trouver une chaîne contenant un mot qui commence par http: // ou www et l'enveloppe avec <a>$1</a>?Rendre les liens cliquables avec regex

Était googling mais je ne peux pas sembler trouver un final.

Une autre question, Pourriez-vous en quelque sorte le faire ignorer si c'est à l'intérieur d'un <img> tag?

Merci beaucoup!

Répondre

8
$text = trim($text); 
    while ($text != stripslashes($text)) { $text = stripslashes($text); }  
    $text = strip_tags($text,"<b><i><u>"); 
    $text = preg_replace("/(?<!http:\/\/)www\./","http://www.",$text); 
    $text = preg_replace("/((http|ftp)+(s)?:\/\/[^<>\s]+)/i", "<a href=\"\\0\" target=\"_blank\">\\0</a>",$text); 
+0

un extrait d'une fonction que j'utilise souvent; contient également (non montré) le code pour remplacer le courrier électronique avec des liens, éventuellement obfusqués –

+1

fonctionne comme un charme! merci beaucoup –

1

Bonne chance avec celui-ci - trouver le début est assez facile (la plupart du temps); trouver la fin? Bonne chance:

  • http://example.com/bob.jones.4.
  • http://example.com/bob.jones.4?
  • http://example.com/bob.jones.4!
  • http://stackoverflow.com/questions/1242733/make-links(oh-noes)
  • http://example.com/bob.'magic'.jones*2!
  • http://example.com/~(*)!

Ce sont des URL valides. Voir RFC2396. Mais parfois vous voulez la ponctuation, parfois vous ne le faites pas. Je me demande à quoi il peut utiliser un url avec (*')!, maintenant qu'il sait que c'est permis par RFC2396.

+0

Quel est le problème en utilisant tous les caractères dans une chaîne? Si c'est avant de leur échapper avec des fonctions comme htmlentites tout est goo, n'est-ce pas? – kwichz

+0

@kwichz: Le problème est que dans une chaîne de texte de plan, il est facile de trouver http: //, mais il est difficile de trouver la * fin * de l'URL, en raison de tous les caractères autorisés dans une URL. Par exemple: 'Il a dit' Essayez de chercher sur http: //www.google.com /. ''Les points de période et les guillemets simples sont des caractères valides dans une URL, il est donc difficile pour un programme de voir où se termine cette URL. – derobert

+0

Je ne vois pas le problème. Juste correspondre jusqu'à ce que vous trouviez le premier espace et cela fonctionnera dans la plupart des cas. –

Questions connexes