2009-08-07 8 views
1

Gibt es eine Regex da draußen, die einen String finden kann, der ein Wort enthält, das entweder mit http: // oder www beginnt und es mit <a>$1</a> umschließt?Machen Sie Links anklickbar mit Regex

Googeln, aber ich kann nicht scheinen, eine ultimative zu finden.

Eine andere Frage, könnten Sie es irgendwie ignorieren, wenn es in einem Tag ist?

Vielen Dank!

Antwort

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

ein Ausschnitt aus einer Funktion, die ich oft verwende; enthält auch (nicht gezeigt) Code, um E-Mail mit Links zu ersetzen, optional verschleiert –

+1

funktioniert wie ein Charme! Vielen Dank –

1

Viel Glück mit diesem - den Anfang zu finden ist ziemlich einfach (die meiste Zeit); das Ende finden? Viel Glück:

  • 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/~(*)!

Das sind gültige URLs. Siehe RFC2396. Aber manchmal wollen Sie die nachlaufende Interpunktion, manchmal nicht.

/me fragt sich, was er eine URL mit (*')! in der es für verwenden können, jetzt, wo er seine von RFC2396 erlaubt kennt.

+0

Was ist das Problem mit allen Zeichen in einer Zeichenfolge? Wenn es ihnen zuvor mit Funktionen wie htmlentites entgeht, ist alles gut, oder? – kwichz

+0

@kwichz: Das Problem ist, dass in einem Plan Textstring, ist es einfach zu finden http: //, aber es ist schwierig, das * Ende * der URL zu finden, aufgrund aller Zeichen, die in einer URL erlaubt sind. Zum Beispiel: 'Er sagte: 'Versuchen Sie, unter http: //www.google.com /.' Zu suchen." Sowohl Punkt als auch Anführungszeichen sind gültige Zeichen in einer URL. Daher ist es für ein Programm schwierig zu sehen, wo diese URL endet. – derobert

+0

Ich sehe das Problem nicht. Passen Sie einfach an, bis Sie das erste Leerzeichen gefunden haben, und es wird in den meisten Fällen funktionieren. –

Verwandte Themen