Links und Mailadressen in String automatisch verlinken

Oft kommt es vor, dass man zum Beispiel in einer Datenbank einen String gespeichert hat, welcher Links oder Email-Adressen enthält.

Möchte man diese nun verlinken, muss der Text natürlich vorher mit PHP modifiziert werden.

Folgende Funktion hat sich nach langer Suche und Kombination verschiedener Lösungen mit meinem eigenen Wissen ergeben:

<?php
function CreateLink($string) {

    $string = str_replace("http://www.","www.", $string);
    $string = str_replace("www.","http://www.", $string);
    $string = preg_replace('/([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[\.a-zA-ZöÖüÜäÄ0-9-]+\.([a-zA-Z]{2,5}))/', 'mailto:$1', $string);

    $url_patterns = array(
        '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);

    return str_replace('>mailto:', '>', $string);
}
?>

Der Aufruf der Funktion erfolgt dann so

<?php
echo CreateLink($string); // Direkt Ausgabe des Textes
// oder
$string = CreateLink($string); // Den Text inkl. Verlinkungen wieder in die Variable abspeichern
?>

Das letzte str_replace ist mit Sicherheit nicht die beste Methode, jedoch die einfachste um das “mailto:” aus dem verlinkten Text zu entnehmen.

Über Feedback, Verbesserungsvorschläge oder Anregungen würde ich mich freuen

Grüße Martin

PS: Besuchen Sie auch mal den Laminiergeräte Shop unseres Sponsors oder schauen Sie unter Apfel-FAQ.de vorbei

Hinterlasse eine Antwort