Automatische Linkerkennung?

breytex

Mitglied
Hallo!

Ich suche eine Funktion, für mein CMS.

Ich möchte, bei der Ausgabe, URLs wie http://www.tutorial.de ersetzt haben mit einem html-link.

Soweit wäre das ja auch nicht schwierig zu realisieren, mein Problem ist jetzt aber, dass die funktion IMMER greifen soll.

also auch bei
http://tutorials.de
oder http://www.tutorials.de/ordern/unterordner/datei.php?id=1337

Das habe ich nicht so ganz hinbekommen...
Die Funktion soll einfach den content als Variable mitgeben und ihn dann per return zurück geben.

Hat jemand zufällig so eine Funktion griffbereit?
Würde mir sehr weiterhelfen :)
mfG
 
In etwa sowas?
PHP:
$string = preg_replace('_(http\:\/\/[a-zA-Z0-9\.\-\/\&\?\,\:\=]+)_', "<a href=\"\\0\">\\0</a>" ,$string);
 
Der reguläre Ausdruck selbst ist aber kein so guter Vorschlag. Probier mal besser folgenden:
PHP:
"<(?: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}))|[;:@&=])*))?)?)>"
Der ist zwar um einiges komplexer, dafür aber auch vollständig, da er direkt von der Spezifikation abgeleitet wurde.
 
Der erste Ausdruck wandelt z. B. keine HTTPS Links um.

Gumbos Ausdruck arbeitet RFC konform, sprich jede Möglichkeit ist bedacht, auch in ihrer Struktur.

Der erste Ausdruck würde auch strukturell falsche Links erkennen.
 
Aha, ok, vielen Dank!

Gibt es für die zweite Variante auch einen entsprechenden Code, um die HTML ausgabe wieder in den Link umzuwandeln, falls man den Beitrag eines Forums editieren möchte, und ihn dafür in einem Textfeld anzeigen lassen muss, wobei dann natürlich die HTML-Codes verschwinden müssen?
 
Genau um einen solchen Schritt unnötig zu machen, sollte man die Daten in Rohform belassen und nur für die Ausgabe formatieren.

Und damit das nicht bei jeder Ausgabe passiert und evtl. zuviel Serverlast erzeugt, sollte man einen Cache verwenden.
 
Zurück