9

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

我被困在 IDN 主机名标签上(即,包含 Unicode;此时可能的 punycode 编码字符串已被解码)。

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

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

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

4

2 回答 2

4

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(更改几个字符的状态)了解所有血腥细节。

于 2014-07-31T19:21:33.587 回答
1

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

于 2010-05-17T19:17:55.573 回答