IDN主机标签中允许哪些Unicode字符?

时间:2010-05-17 19:10:19

标签: unicode tld idn

我目前正在开发一个“正确”的URI验证器,目前这一切都归结为主机名验证;其余的并不是那么棘手。

我坚持使用IDN主机名标签(即包含Unicode;此时已经解码了可能的punycode编码字符串)。

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

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

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

2 个答案:

答案 0 :(得分:2)

IANA在https://www.iana.org/assignments/idna-tables-6.3.0/idna-tables-6.3.0.xhtml#idna-tables-properties

维护所有代码点及其状态的列表

所有标记为PVALID的都可以安全使用。标记为CONTEXTO或CONTEXTJ的标准有更多规则要遵循。阅读RFC5892(IDNA)和RFC6452(更改几个字符的状态)以获取所有血腥细节。

答案 1 :(得分:1)

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