Links in im Text erkennen und als HTML-Link ausgeben

dwex

Erfahrenes Mitglied
Links im Text erkennen und als HTML-Link ausgeben

Hallo,

ich stosse (schon wieder) an meine Grenzen ;-)

Ich habe in einer MySQL-Datenbank mehrere Fliestexte (Newsletter) gespeichert.
Ein Beispieltext sieht so aus:
Code:
Hallo -user-,

das ist der aktuelle Newsletter mit folgenden Themen.

1. Thema1
2. Thema2
3. Thema3

1.Thema1
Das ist der Text zum Thema da steht alles drinn was Wichtig ist.
http://www.link-zum-dokument.de/

2. Thema2
Das ist ein weiterer Text - bitte laden Sie sich die Datei http://www.link-zum-dokumen.de/dokument.pdf auf Ihren Rechner und füllen Sie das Formular vollständig aus.

3. Thema 2
usw. usw....................

Jetzt lese ich diesen Text mit PHP ein und gib ihn im Newsletterarchiv mit <pre> aus.
Die Links werden dabei aber logischerweise nicht als Links sondern als normaler Text übernommen - weil ja <a href> usw. fehlt.

Wie kann ich jetzt den Link (diese sind immer verschieden) in einen echten Link bei der Ausgabe umwandeln?

Vielen Dank im Voraus!
 
Zuletzt bearbeitet:
Mein Vorschlag:
PHP:
<?php

	$url_patterns = array(
		// @link	http://internet.ls-la.net/folklore/url-regexpr.html
		'http'   => "(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)?)",
		'ftp'    => "(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)",
		'mailto' => "(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))+))"
	);
	$pattern = '/(' . addcslashes($url_patterns['http'], chr(0x2F)) . '|' . addcslashes($url_patterns['ftp'], chr(0x2F)) . '|' . addcslashes($url_patterns['mailto'], chr(0x2F)) . ')/';
	$string = preg_replace($pattern, '<a href="\\1">\\1</a>', $string);

?>
 
Hi!
Suche mit der funktion strpos() das auftreten
von http in deinem Text. dann kannst du von dieser
Position an das erste Leerzeichen suchen.
Wenn du nun die Differenz zwischen den beiden
Zahlen bildest weist du wo die Zeichenkette beginnt
und wie lang sie ist und kannst sie nun mit substr()
einer variable zuordnen.

Gruß Benny
 
Zurück