2010-05-17 17 views
8

Ich arbeite derzeit an einem "richtigen" URI-Validator, und derzeit geht es um die Validierung des Host-Namens; Der Rest ist nicht so schwierig.Welche Unicode-Zeichen sind in IDN-Host-Labels zulässig?

Ich bin auf IDN Hostnamen Etiketten fest (d. H, mit Unicode; mögliche Punycode codierte Strings wurden an diesem Punkt decodiert).

Meine erste Idee war im Grunde eine Regex für TLDs, die IDNs nicht unterstützen und eine für diejenigen, die tun. Dies könnte vielleicht auf Mozilla’s list of IDN-enabled TLDs basieren. Jeweils ^[a-zA-Z0-9\-]+$ und ^[a-zA-Z0-9\-\p{L}]+$. Dies ist jedoch keine ideale Situation, da jeder IDN-Registrator entscheiden kann, welche Zeichen zuzulassen sind.

Was ich suche ist eine richtige, konsistente, aktuelle Datentabelle der Unicode-Zeichen in verschiedenen TLDs erlaubt. Es sieht so aus, als müsste ich alle Daten selbst auf russischen und chinesischen Registrierungsseiten finden (was ziemlich schwierig ist).

Also, bevor ich versuche, alle diese Daten selbst zu sammeln, fragte ich mich, ob eine solche Liste bereits existiert. Oder gibt es bessere Ansätze, beste/gängige Praktiken usw.? (Ich möchte, dass die Validierung so streng wie möglich ist.)

Antwort

1

Können Sie nicht alle Unicode-Domains in punycode konvertieren und validieren? Da DNS keine echten UTF-8-Zeichen unterstützt, könnte dies die beste Lösung sein.

+0

Wahr .. ich dachte auch daran. Es geht jedoch um Benutzereingaben. Ich kann meinen Benutzern nicht sagen, dass sie uri zuerst in punycode umgewandelt haben sollen. Also das lässt mich mit (was Sie wahrscheinlich meinten) es intern in punycode konvertieren ... immer noch dies bedeutet nicht, dass der Hostname wirklich gültig sein muss (korrigieren Sie mich, wenn ich falsch bin), so in diesem Fall ein beliebiges Unicode-Zeichen (\ p {L}) und es als gültig betrachten, ist im Grunde dasselbe. Die letzte Option wird meine Fallback-Methode sein, wenn ich nicht zu einer guten Lösung kommen kann; Wenn das der Fall sein sollte, würden Sie vorschlagen, an der Liste festzuhalten, die mozilla anbietet (z. B. 2 Regexes)? –

+0

Zum Löschen oben; TLDs sind auf Mozilla gelistet -> [a-zA-Z0-9 \ - \ p {L}]/Alle anderen TLDs -> [a-ZA-Z0-9 \ -] Wäre das eine korrekte Validierung? –