URLs im Text identifizieren
Ein häufiges Features welches man auf fast jeder Website findet ist die automatische Identifizierung von URLs und E-Mail-Adressen im Text und die automatische Umwandlung dieser in entsprechend anklickbare Hyperlinks. Dieser Artikel zeigt euch, wie dies mittels regulären Ausdrücken funktioniert.
URLs identifizieren
Wir verwenden reguläre Ausdrücke um potentielle URLs zu identifizieren. Für jede gefundene URL fügen wir am Anfang ein [URL] hinzu und am Ende ein [/URL] hinzu. Anschließen lassen wir alle diese URL's ersetzen. Dies hat den Vorteil, dass der Besucher selbst bestimmen kann, wie der Link Text aussieht, indem er z.B. schreibt: [URL=http://www.php-einfach.de]PHP lernen leicht gemacht[/URL].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $text = "http://www.php-einfach.de"; $urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si"; $urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si"; $urlreplace[]="\\1[URL]\\2\\4[/URL]"; $urlreplace[]="[URL]\\1\\3[/URL]"; $text = preg_replace($urlsuch, $urlreplace, $text); // Geben wir den Text jetzt aus, // so erhalten wir als Ausgabe: [URL]http://www.php-einfach.de[/URL]. // Jetzt kommt der nächste Schritt, die URL's werden zu Links: $text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">www.\\1</a>", $text); $text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text); echo $text; ?> |
E-Mail-Adressen identifizieren
Ähnliches können wir mit E-Mail-Adressen anstellen. Finden wir eine potentielle E-Mail-Adresse im Text, beispielsweise [email protected], so wandeln wir diese in einen Hyperlink direkt um. Der entsprechende reguläre Ausdruck sieht dafür wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $emailsuch[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si"; $emailsuch[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si"; $emailreplace[]="\\1[EMAIL]\\2[/EMAIL]"; $emailreplace[]="[EMAIL]\\0[/EMAIL]"; if (strpos($text, "@")){ $text = preg_replace($emailsuch, $emailreplace, $text); } //E-Mail Adressen werden zu links $text = preg_replace("/\[EMAIL\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\1</a>", $text); $text = preg_replace("/\[EMAIL=(.*?)\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\2</a>", $text); echo $text; ?> |
Autor: Nils Reimers