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
// Einbinden der Klasse
include_once('idna_convert.class.php');
// Instanzieren der IDNA-Klasse
$IDN = new idna_convert();
// Falls die Bezeichnung nicht UTF-8 oder UCS-4 codiert ist,
// muss sie vorher konvertiert werden:
$input = utf8_encode('http://www.nörgler.com');
// Encodieren zum Punnycode
$url = $IDN->encode($input);
// Ausgabe
echo $url; // This will read: xn--nrgler-wxa.com
?>
Der encodierte Name kann so auf Gültigkeit oder Erreichbarkeit überprüft werden, z.B. durch:
<?php
// Versuch, die URL zu öffnen
$fp=@fopen($url,"r");
if(!$fp) // Hat geklappt :-)
echo "Homepage ".$url." ist nicht erreichbar\n";
else // Hat nicht geklappt :-(
echo $url." ist erreichbar\n";
?>
Die Klasse von Markus Nix und Matthias Sommerfeld steht unter der LGPL.