Sven Rautenberg: RegExp: Range von UTF-8 Zeichen definieren

Beitrag lesen

Moin!

Auf der anderen Seite frage ich mich allerdings, ob dein Vorhaben grundsätzlich sinnvoll ist. Wenn du sowieso mehrere zehntausend Schriftzeichen erlauben willst, warum willst du dann einige tausend Nicht-Schriftzeichen ausschließen? Wem ist damit geholfen? Welchen Sinn hat das?

Es geht darum, dass mein momentaner Ausdruck:
[\w.:/]{2,}.(?:de|com|org|net){1}
leider keine IDN-Domains aus dem Asiatischen oder Orientalischen Raum erfasst, was mich etwas wundert.

IDN-Domains zu prüfen ist ungefähr so schwer, wie normale Domains zu prüfen. Ohne DNS-Request komplett unmöglich.

Da aber der DNS-Request ohnehin erfolgen muß, implementierst du am besten den Punycode-Algorithmus, der dir aus beliebigem Unicode-Zeugs eine schöne, ASCII-kompatible IDN-Domain macht. Die kannst du dann bei Bedarf immer noch durch den Regex schicken.

Allerdings hilft dir weder der Check mit oder ohne Punycode wirklich weiter, da du - zumindest ohne DNS-Request - nicht weißt, ob die verwendeten Unicode-Zeichen wirklich in einem Domainnamen erlaubt sind.

Die DENIC beispielsweise erlaubt zwar "Umlautdomains" (und die Umlaute sind natürlich Unicode, also sind IDN-Domainnamen notwendig), aber beispielsweise nichts chinesisches im Namen (was auch nur Unicode wäre).

Es dürfte vermutlich auch bei anderen Top-Level-Domains so sein, dass nicht pauschal der gesamte Unicode-Bereich erlaubt ist, sondern nur ausgewählte Zeichen. Welche Zeichen erlaubt sind, weiß der Verwalter der jeweiligen TLD. Nur mit einem nackten Regex wirst du mit großer Wahrscheinlichkeit scheitern - oder die Regex-Prüfung ist sinnlos.

Leider bin ich an PHP4 gebunden, da es kein privates Projekt ist.

Auch kommerzielle bestehende Seiten haben ab jetzt das Problem, dass sie auf PHP 5 umgestellt werden müssen, egal wieviel oder wie wenig Spaß das dem Geldgeber macht.

Das ist im Idealfall die Installation von PHP 5 und der Applikation auf einem Testserver, um festzustellen, dass alles trotzdem noch funktioniert. Nur gemacht werden muß es halt. "Du wurdest gewarnt." Die Story ist ja auch nicht neu, sondern war bereits seit mindestens zwei Jahren absehbar.

- Sven Rautenberg

--
"Love your nation - respect the others."