Punycode: Umlaut-Domains unter PHP konvertieren

Unter PHP lassen sich internationale Domain-Namen (IDNA) einfach konvertieren.

Unter der Vorraussetzung ...

  • PHP 5 >= 5.3.0
  • PECL intl >= 1.0.2
  • PECL idn >= 0.1

können die Befehle

  • idn_to_utf8 - zum Konvertieren von Domainnamen von IDNA ASCII zu Unicode
  • idn_to_ascii - zum Konvertieren von Domainname zu IDNA ASCII form

genutzt werden.

Alternative

Mit dem PEAR-Paket 'Net_IDNA' lassen sich internationale Domain-Namen (IDNA), wie z.B. Namen mit Umlauten, unter php konvertieren.

Nach dem Download und Entpacken des ca. 52kB großen ZIP-Archives stehen die Klassen, ein Beispiel und ein englisch-sprachiges Readme zur Verfügung. Im Grunde ist aber alles selbsterklärend, insbesondere das Beispiel aus dem Readme. Unter anderem ist angegeben, wie die Domain "nörgler.com" zum entsprechenden Punycode encodiert wird:

<?php&#13;
   // Einbinden der Klasse&#13;
   include_once('idna_convert.class.php');&#13;
&#13;
   // Instanzieren der IDNA-Klasse&#13;
   $IDN = new idna_convert();&#13;
   // Falls die Bezeichnung nicht UTF-8 oder UCS-4 codiert ist,&#13;
   // muss sie vorher konvertiert werden:&#13;
   $input = utf8_encode('http://www.nörgler.com');&#13;
&#13;
   // Encodieren zum Punnycode&#13;
   $url = $IDN-&gt;encode($input);&#13;
&#13;
   // Ausgabe&#13;
   echo $url; // This will read: xn--nrgler-wxa.com&#13;
&#13;
?>

Der encodierte Name kann so auf Gültigkeit oder Erreichbarkeit überprüft werden, z.B. durch:

<?php&#13;
   // Versuch, die URL zu öffnen&#13;
   $fp=@fopen($url,"r");&#13;
&#13;
   if(!$fp) // Hat geklappt :-)&#13;
       echo "Homepage ".$url." ist nicht erreichbar\n";&#13;
   else // Hat nicht geklappt :-(&#13;
      echo $url." ist erreichbar\n";&#13;
?>

Die Klasse von Markus Nix und Matthias Sommerfeld steht unter der LGPL.