2010-05-17 38 views
8

我目前工作的一个“正确”的URI验证,目前这一切都归结到主机名验证;其余的并不那么棘手。IDN主机标签中允许使用哪些Unicode字符?

我卡在IDN主机名标签上(即包含Unicode;可能的punycode编码的字符串在这一点上已被解码)。

我的第一个想法基本上是一个TLD的正则表达式,它不支持IDN,一个用于那些。这可能基于Mozilla’s list of IDN-enabled TLDs。分别 ^[a-zA-Z0-9\-]+$^[a-zA-Z0-9\-\p{L}]+$。但是,这不是一个理想的情况,因为每个国际化域名注册管理机构都可以决定允许哪些字符。

我在寻找的是一个适当的,一致的,各种TLD允许的Unicode字符的最新数据表。现在看起来我必须自己在俄罗斯和中国的注册网站上找到所有的数据(这非常困难)。

因此,在我试图自己收集所有这些数据之前,我想知道这样的列表是否已经存在。还是有更好的方法,最佳/常用的做法等? (我希望验证尽可能严格。)

回答

1

难道你不能将所有的Unicode域转换为punycode并验证它吗?由于DNS不支持真正的UTF-8字符,这可能是最好的解决方案。

+0

真..我想到了这一点。然而,它关于用户输入..我不能告诉我的用户填写uri的第一个转换为punycode。 所以这给我留下了(你可能是指)在内部将其转换为Punycode ......这仍然不意味着主机必须是真正有效的(如果我错了纠正我),所以在这种情况下,匹配任何Unicode字符(\ p {L})并认为它是有效的基本上是相同的事情。如果我无法找到一个好的解决方案,最后的选择将是我的备用方法;如果这会是这种情况,你会建议举行对列表的Mozilla提供(例如2点的正则表达式)? – 2010-05-17 19:45:21

+0

以上清除; 顶级域名在mozzilla上列出 - > [a-zA-Z0-9 \ - \ p {L}] /所有其他顶级域名 - > [a-ZA-Z0-9 \ - ] 这是正确的验证吗? – 2010-05-17 19:48:25

相关问题