René: Regex für die neuen Umlautdomains

Beitrag lesen

Hallo,

$text=preg_replace("/(https?://)(www.)?([a-zA-Z0-9-]+.)?([a-zA-Z0-9-]+.[a-zA-Z]{2,5})([a-zA-Z0-9.-?~/=%]+[/~a-zA-Z0-9])?/","<a href="\1\2\3\4\5">\1\2\3\4\5</a>",$text);

Dein regulärer Ausdruck ist in mehrerer Hinsicht fehlerhaft.

Punkt 1: "Umlautdomains" bedeutet nicht nur, dass jetzt "äöüß" im Namen vorkommen dürfen, sondern wesentlich mehr Zeichen. Wie erwähnt wurde: Russisch, Chinesisch, Japanisch...

Ist mir klar, aber das Script wird im deutschsprachigen Raum eingesetzt und ich habe diese Zeichen ja nicht mal auf der Tastatur.

Punkt 2: Warum zum Teufel müssen Domains mit "www" beginnen?

Wo bitte verlangt meine Regex das? Da steht: (www.)? Das ? steht für optional. Der Ausdruck funktioniert hervorragend auch ohne eine www-Domain.

Warum kann ein Domainnamen nur eine begrenzte Anzahl an Teilen enthalten (die Punkte in der Domain sind bei deinem Ausdruck begrenzt)?

Der Einwand ist berechtigt, allerdings sind mir in der Praxis bislang noch keine Sub-Subdomains untergekommen.

Warum gehst du von einer maximalen Top-Level-Domain-Länge von fünf aus - was ist mit ".museum"?

Danke für den Hinweis. Wird geändert.

Mit anderen Worten: Du erfaßt ohnehi nur eine Teilmenge existierender Domains und setzt diese in Links um - warum machst du dir dann Gedanken über die Umlaute.

Die Regex dürfte momentan vermutlich 99,9% aller tatsächlich existierenden gültigen Urls erfassen. Bislang hat es noch nie bei einer gültigen Url nicht funktioniert.

Was besser wäre: Entweder setzt du Links nicht automatisch, sondern nur auf Anforderung des Benutzers um (so wie hier im Forum auch, mit < >, siehe </faq/>),

Nein, die Anwendung wird von vielen Nicht-Technikern benutzt. Die stöhnen über so eine "Schikane". Hier im Forum ist das was anderes. Jeder der hier schreibt bringt mindestens HTML-Anfängerwissen mit.

oder du setzt einfach einen wesentlich freizügigeren Regex ein, der auf das Vorhandensein von "http://" prüft und alles, was dahinter kommt (ausgenommen Leerzeichen) in einen Link wandelt). Und mit "alles" ist dann wirklich alles gemeint, also [^ ]+ im Regex.

Hatte ich früher mal, hat sich aber als extrem unzuverläßig erwiesen, denn es gibt z. B. auch die Möglichkeit, daß eine Url mit einem Komme endet mit einem Fragezeichen mit einem Punkt, mit einem Zeilenumbruch etc. Kurzum diese Lösung ist nicht zu gebrauchen.

Wie gesagt die obige Lösung hat sich bereits hervorragend bewährt. Die Möglichkeit für .museum werde ich aber einführen.

schönen Gruß
René