2010-05-17 18 views
8

Je travaille actuellement sur un "vrai" validateur d'URI, et actuellement tout se résume à la validation du nom d'hôte; le reste n'est pas si difficile.Quels caractères Unicode sont autorisés dans les étiquettes d'hôte IDN?

Je suis bloqué sur les étiquettes de nom d'hôte IDN (c'est-à-dire, contenant Unicode, les chaînes codées punycode possibles ont été décodées à ce stade). Ma première idée était fondamentalement une regex pour les TLD qui ne supportent pas les IDN et une pour ceux qui le font. Cela pourrait peut-être être basé sur Mozilla’s list of IDN-enabled TLDs. Respectivement, ^[a-zA-Z0-9\-]+$ et ^[a-zA-Z0-9\-\p{L}]+$. Cependant, ce n'est pas une situation idéale, puisque chaque registraire IDN peut décider quels caractères autoriser. Ce que je recherche est un tableau de données correct, cohérent et à jour des caractères Unicode autorisés dans divers TLD. Il commence à sembler que je dois trouver toutes les données moi-même sur les sites de registre russe et chinois (ce qui est assez difficile). Avant de tenter de rassembler moi-même toutes ces données, je me suis demandé si une telle liste existait déjà. Ou y a-t-il de meilleures approches, meilleures/pratiques communes, etc.? (Je veux que la validation soit aussi stricte que possible.)

Répondre

1

Vous ne pouvez pas convertir tous les domaines Unicode en punycode et le valider? Puisque le DNS ne supporte pas les vrais caractères UTF-8 de toute façon, cela pourrait être la meilleure solution.

+0

Vrai .. j'ai pensé à ça aussi. Cependant, c'est à propos de l'entrée de l'utilisateur .. Je ne peux pas dire à mes utilisateurs de remplir en premier uri converti en punycode. Alors ça me laisse avec (ce que vous vouliez probablement dire) le convertir en interne en punycode ... mais cela ne signifie pas que le nom d'hôte doit être vraiment valide (corrigez-moi si je me trompe) p {L}) et le considérer comme valide est fondamentalement la même chose. La dernière option sera ma méthode de repli si je ne peux pas arriver à une bonne solution; Si cela est le cas, suggérez-vous de conserver la liste fournie par mozilla (par exemple 2 regex)? –

+0

Pour clarifier ci-dessus; TLD répertoriés sur mozzilla -> [a-zA-Z0-9 \ - \ p {L}]/Tous les autres TLD -> [a-ZA-Z0-9 \ -] Est-ce que ce serait une bonne validation? –