Confixx, Debian Lenny und Umlaut-Domains

Die von uns eingesetzt Version 3.3.2 von Confixx zeigte gestern einige Fehler, die anfangs unerklärlich waren.

Das Hinzufügen von Umlaut-Domains zu einem Kunden-Account war nicht möglich. Confixx entfernte den Umlaut vor der Umwandlung zu Punycode, weshalb der Domain-Name nicht konvertiert wurde. Aus „müller.de“ wurde „mller.de“, was natürlich keine IDN-Domain mehr darstellt.

Nach Durchsicht des Quellcodes und einigem Debugging zeigte sich, dass die Umlaute durch die Funktion „escapeshellarg()“ entfernt werden.

Nach Beiträgen auf drupal.org bzw. im PHP-Handbuch tritt der Fehler genau dann auf, wenn die verwendete Locale am Server kein UTF-8 kann.

Der Apache wird bei Debian Lenny fix auf „LANG=C“ festgesetzt, was genau die Ursache zu sein scheint: mit Debian Etch wurden UTF8-Encodierungen als gültige Zeichen der Shell erkannt, mit Debian Lenny nicht mehr.

Abhilfe schafft der Aufruf von „setlocale()“ direkt im PHP-Code, hier in die „idn-functions.php“ eingefügt, da nur für IDN-Domains benötigt:

setlocale(LC_ALL, "de_DE.UTF-8");

Nun werden die Umlaute nicht mehr aus dem Domain-Namen entfernt, und die Konvertierung nach Punycode funktioniert.

Liebe Confixx-Entwickler, falls ihr das hier lesen solltet: Es gibt tolle PEAR-Module für IDN-Unterstützung, dann muss nicht extra ein externes Perl-Skript aufgerufen werden, nur um einen Domain-Namen zu konvertieren.

Post navigation