Details

In Gästebüchern, Foren oder Blogs kann es sinnvoll sein, die von den Benutzern eingebenen Webadressen bei Veröffentlichung des Beitrags automatisch in eine klickbare URL umzuwandeln. Das geht recht unkompliziert mit einem kleinen PHP-Schnipsel. Dieses soll hier vorgestellt werden.

Text automatisch in Links umwandeln

Zunächst müssen nach einem bestimmten Muster jene Textpassagen extrahiert werden, die auch eindeutig ein Link sind, damit später aus www.nachgeschlaut.de http://www.nachgeschlaut.de wird. Links fangen in der Regel mit www. oder mit http://www. an. Das ist ein eindeutiges Erkennungsmerkmal und dies macht man sich zu Nutze:

$htmlText = str_replace("http://www.","www.",$htmlText);
$htmlText = str_replace("www.","http://www.",$htmlText);

Was passiert hier? Zunächst wird mit Hilfe von str_replace im Text nach http://www. gesucht und durch www. ersetzt. In der zweiten Zeile wird nach www. gesucht und durch http://www. ausgetauscht. Ist das nicht doppeltgemoppelt? Nein. Dieser Schritt ist sogar wichtig, denn so werden auch die www.-Links erkannt, die sonst nicht umgewandelt werden würden.

Jetzt kommt der entscheidende Schritt:

$htmlText = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@\+\_%()]+
[\w-?&;#~=\.\/\@\+\_%()])/i","$1", $htmlText);

Hier wird nun der Link in eine klickbare URL umgewandelt. Wem das jetzt kompliziert erscheint, der sollte sich eingehender mit preg_replace beschäftigen. Wer nicht möchte, dass sich der Link in einem neuen Fenster öffnet, der muss nur das target=\"_blank\" aus der Zeile entfernen.

Emailadressen in Link umwandeln

Optional kann man auch Emailadressen automatisch erkennen und umwandeln, indem man noch folgende Zeile hinzufügt:

$htmlText = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+
\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","$1",$htmlText);

Nun einfach den Text wie gewünscht weiter bearbeiten oder ausgeben:

echo $htmlText;

Hier noch einmal das komplette Skript in PHP

$htmlText = str_replace("http://www.","www.",$htmlText);

$htmlText = str_replace("www.","http://www.",$htmlText);

$htmlText = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@\+\_%()]+
[\w-?&;#~=\.\/\@\+\_%()])/i","$1", $htmlText);

$htmlText = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+
\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","$1",$htmlText);

return $htmlText;
   
© ALLROUNDER