Ach, ich muss gerade ein bisschen über PHP fluchen. Diese tolle Sprache, die für so viele dynamische Websites verwendet wird, sie hat nicht einmal eine Funktion, um Punycode für die bessere Darstellung in einer Website in einen Unicode-String umzuwandeln. Nein, absolut nichts. Na ja, das gibt es ja auch erst seit März 2003, so schnell kann man ja auch nicht immer reagieren, wenn man eine wichtige Skriptsprache für das derzeitige Internet implementiert. In Python hätte ich encodings.idna zur Verfügung, in Perl würde ich einfach IDN::Punycode verwenden, aber im »poor hackers perl« geht man eben manchmal zu Fuß, wenn man sich mit Webstandards herumschlägt und so tolle Sachen wie Domains mit Umlauten hübsch anzeigen will, so dass da nicht »xn--grsslich-1za.de«, sondern »gräßlich.de« steht. Alles andere wäre doch gräßlich, oder?
Es gibt natürlich fertigen Code dafür. Hier kann man zum Beispiel eine hübsche PHP-Klasse herunterladen, die ihre 2706 Codezeilen zu knapp 110 KiB aufbläst. Das ist ganz schön fett für einen verhältnismäßig einfachen Anwendungsfall, und eine dertige Funktionalität gehört auch eher in den PHP-Kern oder doch wenigstens in eine Standardbibliothek. Ich mein ja nur mal so, sieben Jahre nach Veröffentlichung des RFC…
Aber eine gute Nachricht gibt es doch noch in dieser Geschichte: Wer nur Punycode in Unicode umwandelt und es etwas »abgespeckter« möchte, sollte sich mal diese Funktion anschauen – die ist aber frei von jeglicher Fehlerbehandlung, was natürlich ein Problem sein kann. Und wer mit dem Gedanken spielt, Domains mit Umlauten zu verwenden: Bitte lass es einfach bleiben, es ist xn--grsslich-1za!