2010-05-17 20 views
8

Actualmente estoy trabajando en un validador de URI "adecuado", y actualmente todo se reduce a la validación del nombre de host; el resto no es tan complicado.¿Qué caracteres Unicode están permitidos en las etiquetas de host IDN?

Estoy atascado en las etiquetas de nombre de host IDN (es decir, que contiene Unicode; las posibles cadenas codificadas en punycode se han decodificado en este punto).

Mi primera idea fue básicamente una expresión regular para TLD que no admite IDN y otra para aquellos que sí lo hacen. Esto podría quizás basarse en Mozilla’s list of IDN-enabled TLDs. Respectivamente, ^[a-zA-Z0-9\-]+$ y ^[a-zA-Z0-9\-\p{L}]+$. Sin embargo, esta no es una situación ideal, ya que cada registrador de IDN puede decidir qué caracteres permitir.

Lo que estoy buscando es una tabla de datos adecuada, coherente y actualizada de los caracteres Unicode permitidos en varios TLD. Está empezando a parecer que tengo que encontrar todos los datos en los sitios de registro de Rusia y China (lo cual es bastante difícil).

Así que antes de ir a tratar de recopilar todos estos datos, me pregunté si esa lista ya existe. ¿O hay mejores enfoques, mejores/prácticas comunes, etc.? (Quiero que la validación sea lo más estricta posible.)

Respuesta

1

¿No puedes convertir todos los dominios Unicode a punycode y validar eso? Dado que DNS no es compatible con los caracteres UTF-8 reales de todos modos, esta podría ser la mejor solución.

+0

Verdad ... pensé en eso también. Sin embargo, se trata de la entrada del usuario ... no puedo decirles a mis usuarios que completen primero los uri convertidos a punycode. Así que eso me deja (lo que probablemente quiso decir) convertirlo en punycode ... aún así no significa que el nombre de host tiene que ser realmente válido (corríjanme si estoy equivocado), así que en ese caso coincida con cualquier carácter Unicode (\ p {L}) y considerarlo como válido es básicamente lo mismo. La última opción será mi método alternativo si no puedo llegar a una buena solución; si este es el caso, ¿sugeriría que se mantenga la lista que proporciona mozilla (por ejemplo, 2 expresiones regulares)? –

+0

Para aclarar arriba; TLD's listados en mozzilla -> [a-zA-Z0-9 \ - \ p {L}]/Todos los demás TLD's -> [a-ZA-Z0-9 \ -] ¿Sería esta la validación adecuada? –

Cuestiones relacionadas