2 Stimmen

Coldfusion und Java: Wie man eine Punycode IDN validiert

Ich habe kürzlich einige Formulare neu aufgebaut, damit sie internationale Domains akzeptieren wie

http://.

Diese würde ich dann als Punycode speichern. Vorher hatten wir jedoch Validierungscode laufen, um zu überprüfen, ob die Domain mit der Methode isValid() von Coldfusion gültig war:

if(not isValid("url", sURL)){
return false;
}

Bei Punycode haben wir ein Problem mit der Funktion isValid(), die nicht funktioniert, wenn die Domain wie folgt aussieht:

http://.

oder wenn sie in ihren Punycode mit CreateObject( "java", "java.net.IDN" ).toASCII(sURL); umgewandelt wird und in bestimmten Fällen so aussieht:

xn--http://133ab--xn328sdf

(erfundenes Beispiel, aber in bestimmten Fällen können Zeichen vor dem http:// Teil vorhanden sein)

Gibt es derzeit eine Möglichkeit, IDNs und "normale" Domains mithilfe einer Java-Bibliothek oder Coldfusion-Bibliothek oder Regex zu validieren?

3voto

Chris Blackwell Punkte 2058

Ein IDN ist eine Darstellung des Domainnamens, in Ihrem Fall scheinen Sie das Protokoll (http://) in dem String, den Sie konvertieren, einzuschließen.

Entfernen Sie zuerst das Protokoll entweder mit einem einfachen replace() oder mit java.net.URL, und kombinieren Sie bei Bedarf das Protokoll und die IDN danach erneut.

oUrl = createobject("java", "java.net.URL").init("httP://.");
protocol = oUrl.getProtocol();
domain = oUrl.getHost();
idn = createobject("java", "java.net.IDN").toAscii(domain);
writeDump(protocol);  // -> http
writeDump(domain);    // -> .
writeDump(idn);       // -> xn--fsqu00a.xn--0zwm56d

Nachdem Sie den Punycode erhalten haben, sollten Sie isValid() darauf anwenden können.

0 Stimmen

Für zukünftige Benutzer: Sie müssen das Domain- und Protokoll trennen und sie dann bei Verwendung von isValid wieder kombinieren. Wenn Sie es jedoch speichern, verwenden Sie die toAscii-Funktion für die ursprüngliche URL, da beim Versuch von toUnicode, wenn die URL nicht das xn-- vor dem http:// hat, das Unicode für die Domain nicht korrekt angezeigt wird.

0 Stimmen

Wenn Sie es speichern, sollten Sie es in einer gültigen Form speichern. Sie können das Protokoll jederzeit vor dem Konvertieren zurück in Unicode abziehen und dann wieder mit dem Protokoll kombinieren.

0voto

Cyril Hanquez Punkte 686

Vielleicht können die Antworten hier helfen Wie sendet man E-Mails an Empfänger mit Umlauten im Domain-Namen?

Sie schlagen vor, folgendes zu verwenden

oder die LibIdn Java-Bibliothek

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X