[统一码] 技术报告
 

Unicode®技术标准#46

Unicode IDNA兼容性处理

版本 15.1.0
编辑 马克·戴维斯(markdavis@google.com),
米歇尔·希格纳德(michel@suignard.com)
日期 2023-09-05
此版本 https://www.unicode网站.org/reports/tr46/tr46-31.html
上一版本 https://www.unicode.org/reports/tr46/tr46-29.html
最新版本 https://www.unicode.org/reports/tr46/
最新建议更新 https://www.unicode.org/reports/tr46/proposed.html
修订 31

总结

浏览器和电子邮件发送程序等客户端软件面临国际域名版本的艰难过渡2003年批准(IDNA2003),2010年批准的修订版(IDNA2008)。本文件中的规范提供了一种机制将此转换对客户端软件的影响降至最低,允许客户端软件访问下有效的域任一系统。

该规范提供了两个主要功能:一个是支持当前用户期望的全面映射域名的大小写和其他变体。这样的映射是允许的IDNA2008。第二个是支持IDNA2003允许的现有域名。这个第二个功能旨在改善过渡期。

状态

本文档已由Unicode成员和其他相关方,并已由Unicode联盟。这是一个稳定的文档,可以用作参考资料或被其他人引用为规范性参考规范。

Unicode技术标准(UTS)是独立的规范。符合Unicode标准并不意味着符合任何UTS。

请在网上提交更正和其他意见报告表格[反馈].有助于理解本文档的相关信息是在中找到工具书类。最新Unicode标准的版本,请参见[Unicode码]. 对于当前Unicode技术报告列表,请参见[报告]. 更多信息有关Unicode标准版本的信息,请参阅[版本].

目录




1介绍

域名的一大优点是通用性。URLhttp://Apple.com去了苹果公司使用任何浏览器从世界任何地方访问网站。电子邮件地址markdavis@google.com可以是用于从任何地方向本规范的编辑发送电子邮件在世界上,使用任何电子邮件。

最初,域名仅限于ASCII字符。这是使用其他角色给人们带来了巨大的负担。假设,对于例如,域名系统是希腊人发明的URL中只能使用希腊字符apple.com网站,一个人必须写有点像αππλε.κομ.英语演讲者不仅要熟悉希腊字符,但也必须选择那些对应的希腊字母到所需的英文字母。人们不得不猜测特定单词的拼写,因为没有精确匹配脚本之间。

直到最近,世界上大多数人口都面临着这种情况,因为他们的语言使用非ASCII字符。一个系统是2003年推出的国际化域名(IDN)。这个系统被称为的域名国际化应用或简称IDNA2003。此机制通过以下方式支持IDN将客户端软件转换为以下格式的方法Punycode公司。2010年批准了IDNA的修订版(IDNA2008)。这个该版本与IDNA2003有许多不兼容之处。

不兼容性迫使客户端软件的实现者,例如浏览器和电子邮件,在过渡期,注册中心从IDNA2003转移到IDNA2008。这个文档指定了一种将此影响降至最低的机制客户端软件的转换,允许客户端软件访问在任一系统下都有效的域。

该规范提供了两个主要功能。第一个是支持当前用户对套管期望的全面映射和其他域名变体。这样的映射是允许的IDNA2008。第二个特性是一种兼容机制支持IDNA2003允许的现有域名。第二个功能旨在改进过渡期。本规范包含规范和信息材料。只有符合性条款和文本它们直接或间接引用被认为是规范性的。

1.1IDNA2003年

RFC系列统称为IDNA2003[IDNA2003年]允许域名包含非ASCII Unicode字符,不仅包括字符英语以外的拉丁语脚本语言所需(例如,奥语、Ħ、,或Þ),但也有不同的脚本,如希腊语、西里尔语、泰米尔语或韩国人。国际化域名,例如比彻.de然后可以在“国际化”URL,称为IRI,例如http://Bücher.de#titel网站

允许非ASCII Unicode字符进入的IDNA机制域名包括对中的每个标签应用以下步骤包含Unicode字符的域名:

  1. 转换(映射)Unicode字符串以删除大小写和其他变量差异。
  2. 根据检查结果字符串的有效性某些规则。
  3. 将Unicode字符转换为与DNS兼容的字符使用专用编码的ASCII字符串Puny代码[RFC3492号文件].

例如,键入IRIhttp://Bücher.de网址在任何现代浏览器的地址栏中站点,即使“u”不是ASCII字符。这个工作,因为IRI中的IDN解析为Punycode字符串它实际上是由该站点的DNS存储的。类似地,当浏览器解释包含链接的网页,例如<ahref=“http://Bücher.de”>,合适的网站是已达到。(在本文档中,“浏览器”等短语解释“指从输入的IRI中解析出的域名地址栏以及链接中包含的内容HTML文本内部。)

如果是IDN比彻.de,的线路上域名实际使用的Punycode值为xn-断路器-kva.de。Punycode版本为通常也会转换回Unicode格式进行显示。这个结果显示字符串将是一个已经根据IDNA2003规则映射。此示例导致已将大小写转换为小写的IRI的显示字符串:

http://Bücher.de网址http://xn-bcher-kva.dehttp://bücher.de网址

IDNA2003的一个主要限制是对曲目的限制Unicode 3.2中的字符数,这意味着一些现代语言被排除或不完全支持。此外,在IDNA2003的限制,没有简单的方法来扩展剧目。IDNA2003也没有向用户明确注册他们正在为域注册的字符串名称(介于比彻.debücher.de先生例如)。

1.2IDNA2008年

2010年初,新版IDNA获得批准。像IDNA2003一样,此版本由RFC集合组成,称为IDNA2008[IDNA2008年]. IDNA2008旨在解决IDNA2003中的主要问题。它扩展了域名中的字符,并为更新到Unicode标准的未来版本。此外,它明确定义有效域名的概念,以便注册者确切地了解域名字符串是什么已注册。

IDNA2008中的处理与IDNA2003中的许多常见处理相同域名。IDNA2003和IDNA2008都转换了Unicode域IRI中的名称(如网址:http://öbb.at)Punycode版本(如http://xn-bb-eka.at)。然而,IDNA2008没有保持严格的向后兼容性使用IDNA2003。主要区别是:

有关更多详细信息,请参阅第7节,印尼国家航空公司比较

1.3过渡注意事项

IDNA2008和IDNA2003之间的差异可能导致互操作性和安全性问题。它们影响极为普遍字符,例如所有大写字符、所有半角或全角字符(通常在日本、中国和韩国使用),以及某些其他字符,如德语埃塞特(U+00DFß拉丁语小写字母SHARP S)和希腊语最终西格玛(U+03C2м希腊小写字母最终SIGMA)。

1.3.1映射

IDNA2003需要映射阶段,该阶段映射ÖBB.at公司öbb.at(英国广播公司)例如。映射通常涉及将大写字符映射为小写字符对,但它还涉及其他类型的映射等效字符,例如映射半宽片假名字符到法线片假名日语字符。这个IDNA2003中的绘图阶段被包括在内,以匹配ASCII域名。用户习惯于同时拥有这两者中国互联网络中国新闻网工作方式相同。他们希望带重音符号的域名具有相同的套管行为,因此?BB.at公司与相同öbb.at(英国广播公司)。有变化类似于其他脚本中的大小写差异。IDNA2003映射基于Unicode标准版本中指定的数据3.2; 该映射后来被形式化为Unicode属性[NFKC_底座].

请注意,casefolding生成稳定形式的字符串消除功能案例差异。它是一样小写。特别是,添加了小写切罗基字符在Unicode V8.0中,大小写转换为大写相对应的人。

IDNA2008不需要映射阶段,但需要许可证(称为“本地映射”或“自定义映射”)。对于有关允许的映射的更多信息,请参阅协议的文档[IDNA2008年],第4.2节,允许的字符和标签验证第5.2节,转换为Unicode

UTS#46规范定义了与IDNA2008协议的规范性要求尽可能与IDNA2003兼容。对于客户端软件提供最符合用户期望的行为关于使用现有数据名称处理域名域名将在客户支持上一致映射IDNA2003和使用UTS#46映射支持IDNA2008的客户端。

1.3.2偏差

在一些情况下,IDNA2008的使用没有兼容性映射将导致IDN解析为与IDNA2003中的不同IP地址,除非注册表或注册人采取特别行动。这会影响极少数字符,但因为这些字符在特定语言中的大量域名语言受到影响。这组字符称为“偏差”,如所示表1,偏差字符,在IRI背景下进行说明。

表1。偏差字符

烧焦 例子 IDNA2003结果 IDNA2008结果
ß
00(东风)
href=“网址:http://faß.de“ 网址:http://fass.de
网址:http://fass.de
http://fa网址ß.德
http://xn-fa-hia.de
ς
03C2号
href=“http://βλОО.com" http://β_λoσ.com
http://xn-nxasmq6b.com
http://βλОО.com
http://xn-nxasmm1c.com
ZWJ公司
200天
href=“网址:http://ශ්රී.com" 网址:http://
http://xn-10cl1a0b.com
网址:http://
网址:http://xn-10cl1a0b660p.com
ZWNJ公司
200摄氏度
href=“网址:http://" 网址:http://
http://xn-mgba3gch31f.com
网址:http://
http://xn-mgba3gch31f060k.com

有关发生这些情况的原因的更多信息IDNA2008中的偏差,请参阅[IDN常见问题].

偏差字符的解释差异导致潜在的安全漏洞。考虑一个涉及以下内容的场景http://www.sparkasse-gie网站ß英语.de,德国人IRI包含“Gießen储蓄和贷款”的IDN。

  1. Alice的浏览器支持IDNA2003。根据这些规则,http://www.sparkasse-gie网站ß英语.de映射到http://www.sparkasse-giessen.de,这将导致一个具有IP地址的站点01.23.45.67
  2. 她去看望她的朋友鲍勃,并在他的浏览器。他的浏览器支持IDNA2008。根据这些规则,http://www.sparkasse-gie网站ß英语.de也是有效,但在中转换为其他Punycode域名http://www.xn--sparkasse-gien-2ib.de网站.这个可以使用IP地址访问其他站点101.123.145.167,恶搞网站。

Alice最终来到了钓鱼网站,为她的银行提供资金密码,她的钱被偷了。而。DE寄存器(DENIC)可能有一个关于将所有ß变体捆绑在一起的政策(这样他们都有相同的所有者)不需要注册中心。不太可能所有注册中心都拥有并执行在所有此类情况下,都会采取这样的捆绑政策。

有两个特别值得关注的偏差。IDNA2008允许标签中的连接符(ZWJ和ZWNJ)。相比之下,这些被IDNA2003中的映射删除。用于预期用途时上下文在特定脚本中,连接符会生成一个显示文本中的明显变化。然而,当在任何这些脚本或任何其他脚本中的其他字符看不见。例如,在拉丁字符之间使用时“a”和“b”没有明显的区别:序列“a<ZWJ>b”看起来就像“ab”。

由于细木工引入的视觉混淆性字符,IDNA2008为它们提供了一个特殊类别,称为CONTEXTJ,并且只允许在有限的上下文中使用CONTEXTJ字符:阿拉伯或印度字符的特定序列。然而,不需要检查执行IDNA2008查找的应用程序对于这些上下文,总体安全性依赖于注册表具有正确的实现。此外,IDNA2008背景限制不适用于具有不同域名的大多数情况由于ZWJ和ZWNJ,外观看起来很模糊。

2Unicode码IDNA兼容性处理

满足用户对映射的期望,并提供最大与IDNA2003兼容,本文档指定了与IDNA2008一起使用。此外,为了更顺利地过渡到IDNA2008,本文档为标准化处理,允许一致性实现将由IDNA2003和IDNA2008之间的差异。此Unicode IDNA兼容性处理的结构符合IDNA2003原则,但将这些原则扩展到Unicode 5.2及更高版本。还包含了IDNA2008提供的曲目扩展。

如果不需要过渡处理,可以使用UTS#46通过声明,纯粹作为IDNA2008的预处理(本地映射)特别符合一致性条款C3类

通过使用此兼容性处理?BB.at公司将映射到有效域名称öbb.at(英国广播公司),从而匹配用户域名中大小写行为的预期。为了过渡使用,兼容性处理还允许域名包含IDNA2003中有效的符号和标点符号,例如√.com(具有关联的网页)。此类包含符号的域名将逐渐消失注册转移到IDNA2008。

实现还可以限制或标记(在UI中)以下域名包括符号和标点符号。有关更多信息,请参阅Unicode码技术报告#36,Unicode安全注意事项[UTR36标准].

使用Unicode IDNA兼容性处理转换将IDN转换为适合DNS查找的形式类似于“尝试IDNA2008,然后尝试IDNA2003”。然而,这种方法避免可能出现问题的双重查找。它允许浏览器和其他客户端,如搜索引擎,具有单一处理步骤,无需维护两个不同的实现和多个表。它解释了许多边缘情况会导致问题,并提供稳定的定义可预测的结果。

Unicode IDNA兼容性处理还提供偏差字符的备用映射。这有助于从IDNA2003过渡到IDNA2008。这取决于注册中心决定如何处理转换,例如,通过捆绑或阻止它们支持的偏差字符。实际上,对于偏差字符,转换是完全的。所有主要实现都已切换到对四个偏差字符的非过渡处理。

“注册中心”一词远不止包括顶级注册中心注册表,例如.de文件.com网站例如,.blogspot.com有更多域名比大多数顶级注册中心都注册了。可能会有不同为登记处及其任何分区域制定的政策。因此在过渡过程中需要考虑数以百万计的注册战略,而不仅仅是数百个。

在查找软件中,转换可能是细粒度的:例如,可能会过渡到IDNA2008规则以下各项的偏差.subdomain.com网站在给定点,但不适用于.com网站反之亦然。如果.tld格式捆绑或阻止偏差字符,然后客户端可以过渡偏差.tld格式,但不是为了(比如).subdomain.tld(子域.tld)此外,具有UI的客户端软件,例如浏览器,可以为过渡提供更多选项。A满对这种过渡战略的讨论超出了本文档。

在此期间,文档(如HTML)的作者文件,可以明确参考IDNA2008对显式使用域名的Punycode形式标签。

域有两种稍有不同的兼容性机制过渡期间和之后的姓名。UTS#46因此规定两种特定类型的处理:过渡处理(一致性条款C1类)和非过渡处理(一致性条款指挥与控制)。它们之间的唯一区别是操控性四个偏差字符。

简要总结一下,UTS#46以IDNA2008为基础,分为三个版本地区:

为了演示IDNA2003、IDNA2008和Unicode IDNA兼容性处理,请参见[DemoIDN公司]. 有关差异的更多详细信息,看见第7节,IDNA比较UTS#46不会更改IDNA2008中定义的任何术语,例如A-Label或U-Label。

Unicode IDNA兼容性处理和IDNA2008解决与易混淆(所谓的"paypal.com网站“问题)。IDNA2008不允许某些符号和标点符号可以用于欺骗,例如对斜杠字符的欺骗("/"). 然而,这些只是用于欺骗的易混淆字符。此外,令人困惑角色本身在钓鱼中所占比例很小问题:大多数是“secure-wellsfargo.com”这样的案例。对于更多信息,请参阅[博茨迈尔]和[IDN常见问题]. 强烈建议:Unicode码技术报告#36,Unicode安全注意事项[UTR36标准]和Unicode技术标准#39、Unicode安全机制[UTS39标准]是咨询有关处理混淆问题的信息客户端软件和注册表。特别是[UTS39标准]提供了可用于大幅减少处理国际域名时易混淆的数量,远远超出IDNA2008的功能。另请参见[DemoConf公司].

2.1的显示国际化域名

IDNA2003应用程序通常将处理后的字符串显示给用户。这通过减少可视性的机会来提高安全性易混淆性。例如,URL网址:http://google.com(大写字母I代替L)显示为网址:http://googie.com

2.2登记处

本规范主要针对进行查找的应用程序IDN的。然而,有一条强烈的建议建议登记处:不允许注册无效的标签根据非过渡处理,以及使用捆绑或阻塞包含易混淆字符的标签

这些策略可以描述如下:

注:Unicode以外的一些实现对这些策略使用不同的术语。特别是,在ICANN根区域标签生成规则中[RZLGR5型],术语可分配变量of X用于可以与X捆绑的标签,和术语封闭变体用于互斥标签。

实际注册并插入注册表的标签始终已处理。例如,xn—bcher-kva对应于比彻。然而,它可能注册表也可以请求“未处理”标签,例如作为比彻,作为注册的一部分程序,以便他们了解注册人的意图。然而,必须小心处理此类未加工标签:

2.3符号

使用属性和语法定义代码点集Unicode码技术标准#18,Unicode正则表达式[UTS18标准]. 例如,组合标记集为由语法表示\p{gc=M}此外,“+”表示添加元素为了清晰起见,将其设置为一组。

在本文档中标签是域名的子字符串。该子字符串的两边由start或字符串末尾或以下任何字符,称为标签分隔符以下为:

  1. U+002E(.)完全停止
  2. U+FF0E(.)全宽全停
  3. U+3002(.)思想完全停止
  4. U+FF61(“”)半深思想完全停止

许多人使用术语“域名”和“主机”names”可互换。本文档如下[RFC3490协议]使用术语“域”名称”。

A类Bidi域名是一个至少包含一个字符的域名Bidi_Class R、AL或AN。请参见[IDNA2008年]RFC 5893,第1.4节。

合规性

实现一致性的要求Unicode码IDNA兼容性处理算法如下所述条款。实现可以声明符合以下任何或所有条件这些条款是独立的。

C1类(已弃用)给定一个Unicode版本和Unicode码字符串,一致的实现过渡性的处理应通过应用第4节规定的过渡处理算法,处理

指挥与控制给定一个Unicode版本和Unicode码字符串,一致的实现非过渡性处理应通过应用第4节规定的非过渡处理算法,处理

C3类给定一个Unicode版本和Unicode码字符串,一致的实现预处理适用于IDNA2008应复制第4.4节规定的结果,IDNA2008预处理

这些规格是符合逻辑的一个,设计为描述起来很简单。实际实现可以免费使用不同的方法,只要结果与逻辑算法。

任何一致的实现也可能具有更紧的有效性标准,而不是第4.1节,有效性标准例如应用程序可能会禁止或警告带有特定特征,例如:

有关更多信息,请参阅Unicode技术报告#36,Unicode安全注意事项[UTR36标准]和Unicode码技术标准#39,Unicode安全机制[UTS39标准].

3.1STD3规则

IDNA2003提供了一个标志,使用STD3ASCII规则,允许实现选择是否遵守中的规则[STD3标准]. 这些规则不包括ASCII包含A-Z、A-Z、0-9和U+002D的集合外的字符(-)HYPHEN-MINUS。例如,一些浏览器还允许使用字符如U+005F(_)LOW LINE(下栏)在域名中,从而使用UseSTD3ASCIIRules=假,加上他们自己的有效性检查其他ASCII字符。

While期间UseSTD3ASCIIRules=真非常强大推荐,第5节,IDNA映射表向提供数据允许实现支持UseSTD3ASCIIRules=假在必要时与IDNA2003实现兼容。这个映射表执行以下操作:提供Status值和mapping两者的值UseSTD3ASCIIRules=真UseSTD3ASCIIRules=假.使用UseSTD3ASCIIRules=假将需要对映射值应用自己的验证,如下所示如所示第4.1节,有效性标准

4处理

Unicode IDNA兼容性处理的输入是一个前景域名称字符串以Unicode表示,可以选择Transitional或非过渡处理。域名由以下序列组成带有点分隔符的标签,例如“Bücher.de”。有关URL,参见第3.5节[STD13标准].

主要处理步骤

按顺序执行以下步骤,依次更改输入域名称字符串,然后将其输出为转换后的Unicode字符串,加上一个标志以指示是否存在错误。即使发生错误时,将执行字符串转换是可能的。

输入

处理
  1. 地图对于每个代码中的点域名称字符串,在中查找状态值第5节,IDNA映射表,然后使用以下操作:
    • 不允许的:保留代码点字符串中没有更改。注意:下面的转换/验证步骤检查不允许的字符,之后映射和规范化。
    • 忽略:从中删除代码点字符串。这相当于将代码点映射到空字符串。
    • 映射以下为:如果过渡_处理(已弃用)和代码点是U+1E9E大写夏普(ẞ),然后用“ss”替换字符串中的代码点。否则:
      替换中的代码点字符串中映射的值第5节,印尼国家航空公司映射表
    • 偏离以下为:
      • 如果过渡_处理(已弃用),替换代码通过中映射的值指向字符串第5节,IDNA映射表
      • 否则,请保留代码字符串中未更改的点。
    • 有效的:保留中的代码点不变字符串。
  2. 规格化(Normalize)规范化域名字符串到Unicode规范化表格C。
  3. 休息.打破在U+002E(.)FULL STOP处串入标签。
  4. 转换/验证。对于中的每个标签域名称字符串:
    • 如果标签以“xn--”开头以下为:
      1. 如果标签包含任何非ASCII码位(即大于U+007F的码位),请记录存在错误,然后继续下一个标签。
      2. 尝试将标签的其余部分转换为Unicode根据Puny代码[RFC3492号文件]. 如果转换失败如果没有忽略无效Puny代码,记录出现错误,并且继续下一个标签。否则,更换原件转换结果在字符串中添加标签。
      3. 验证标签是否符合中的有效性标准章节4.1,有效性标准用于非过渡处理。如果任何有效性标准不满意,记录有错误。
    • 如果标签没有开始带有“xn--”以下为:
      • 验证标签是否符合章节4.1,有效性标准输入处理选项(过渡或非过渡性)。如果任何有效性标准不是满意,记录有错误。

任何输入域名称不记录错误的字符串具有已根据本规范成功处理。相反,如果输入域名称字符串导致错误,然后处理输入域名字符串失败。决定如何处理错误输入取决于调用方,而不是在本文件范围内。处理过程是幂等元对输出重新应用处理将不会进一步更改。有关示例,请参见表2,过渡时期的例子处理

实现可以对结果进行进一步修改向用户显示时使用Unicode字符串。例如,它是建议将不允许的字符替换为U+FFFD使它们对用户可见。类似地,处理失败的标签在步骤4中,可以通过插入U+FFFD或其他视觉设备。

带有过渡或非过渡处理,验证Punycode中已有的源没有映射。尤其是包含偏差的Punycode字符,例如href=“xn-fu-hia.de"(对于fuß.de)未重新映射。这提供了一种机制,允许即使在过渡期间也明确使用偏差字符。

4.1有效性标准

非空标签必须满足以下每个标准:

  1. 标签必须采用Unicode规范化表单NFC。
  2. 如果检查连字符,标签不能包含U+002D HYPHEN-MINUS字符在第三和第四位置。
  3. 如果检查连字符,标签不得以U+002D开头或结尾HYPHEN-MINUS字符。
  4. 如果没有检查连字符,标签不得以“xn--”开头。
  5. 标签不得包含U+002E(.)FULL STOP。
  6. 标签不得以组合标记开头,即:General_Category=标记。
  7. 标签中的每个代码点只能具有特定的状态根据第5节,印尼国家航空公司映射表以下为:
    1. 对于过渡处理(已弃用),每个值都必须有效的
    2. 对于非过渡处理,每个值必须是有效的偏离
  8. 如果CheckJoiners(检查联接),标签必须满足ContextJ规则附录A,在里面Unicode代码点和应用程序的国际化域名(IDNA)[IDNA2008年].
  9. 如果CheckBidi公司,如果域名是Bidi域名,则标签必须满足所有中的六个编号条件[IDNA2008年]RFC 5893,第2节。

前6个标准来自[IDNA2008年],除了第四个标准。尤其是准则#2旨在允许将来扩展xn以外的标签,例如将来IDNA版本。一些实现似乎考虑了这种扩展不太可能,并允许标签如“r3---sn-apo3qvuoxuxbt-j5pe”。

任何特定应用可以具有更严格的有效性标准,如中所述第3节,合规性

4.1.1使用STD3ASCII规则

如果UseSTD3ASCIIRules=假然后是有效性测试表Status值未提供ASCII字符,但依赖于实现。例如,如果实现允许字符[\u002Da-zA-Z0-9]以及underbar(_),则需要使用表值对于UseSTD3ASCIIRules=假,并测试任何其他ASCII字符作为其有效性标准的一部分。这些ASCII字符字符可能来自映射:例如U+005F(_)低线(下栏)可能最初是U+FF3F(_)全宽低线。

当前没有带状态值不允许_STD3_valid

4.1.2从右到左脚本

此外,标签应满足从右向左的要求的右向左脚本文档中指定的字符[IDNA2008年]和中的CONTEXTJ要求协议文件[IDNA2008年]. 它是强烈建议Unicode技术报告#36,Unicode安全注意事项[UTR36标准]和Unicode码技术标准39,Unicode安全机制 [UTS39标准]咨询交易信息带有易混淆的字符,以及应排除在外的字符标识符。请注意,建议的排除是中的那些[IDNA2008年].

4.2ToASCII码

ToASCII对应的操作[RFC3490协议]由以下步骤定义:

输入

处理

  1. 到输入端域名称,应用处理步骤在里面第4节,处理,使用输入布尔标志过渡_处理,检查连字符,CheckBidi公司,CheckJoiners(检查联接)、和使用STD3ASCII规则。这可能会记录错误。
  2. 在U+002E FULL STOP将结果分成标签。
  3. 将每个带有非ASCII字符的标签转换为Punycode[RFC3492号文件]、和前缀为“xn--”。这可能会记录一个错误。
  4. 如果验证DnsLength标志为true,然后验证DNS长度限制。这可能会记录错误。有关更多信息,参见[STD13标准]和 [STD3标准].
    1. 域名的长度,不包括根标签它的点是从1到253。
    2. 每个标签的长度从1到63。
      • 注:从技术上讲,完整的域名以DNS根目录的空标签(请参见[STD13标准] [RFC1034协议]第3节)。这个空标签和尾随的点几乎总是被省略。
      • 什么时候?验证DnsLength为false,则传递空的根标签。
      • 什么时候?验证DnsLength为true,则不允许空根标签。这与中的语法相对应[RFC1034协议]第3.5节首选名称语法它还定义了标签长度限制。
  5. 如果在步骤1-4中记录了错误,则操作失败,并返回失败值。不应进行DNS查找完成。
  6. 否则,使用U+002E FULL STOP作为分隔符,并返回结果。

建议实现对这些应用附加测试标签,如中所述Unicode技术报告#36、Unicode安全注意事项[UTR36标准]Unicode技术标准#39,Unicode安全机制[UTS39标准],并采取适当的行动。例如,带有混合脚本或易混淆的标签可能在UI中调用。请注意,使用Punycode来发出信号如中所述,问题可能会适得其反[UTR36标准].

4.3到Unicode

的ToUnicode对应的操作[RFC3490协议]由以下步骤定义:

输入

处理

  1. 到输入端域名,应用处理步骤在里面第4节,处理,使用输入布尔标志过渡_处理,检查连字符,CheckBidi公司,CheckJoiners(检查联接)、和使用STD3ASCII规则。这可能会记录错误。
  2. 喜欢[RFC3490协议],这将永远生成转换后的Unicode字符串。与的ToASCII不同[RFC3490协议],这始终表明是否出现了一个错误。

建议实现对这些应用附加测试标签,如中所述Unicode技术报告#36、Unicode安全注意事项[UTR36标准]Unicode技术标准#39,Unicode安全性机制 [UTS39标准],然后采取适当的行动。例如,带有混合脚本的标签或用户界面中可能会显示易混淆的内容。请注意如前所述,微小代码到信号问题可能会适得其反英寸[UTR36标准].

4.4预处理适用于IDNA2008

中指定的表第5节,印尼国家航空公司映射表也可用于的纯预处理步骤IDNA2008,将输入的Unicode字符串直接映射到IDNA2008中指定的算法。

IDNA2008的预处理规定如下:

应用第4.3节,到Unicode处理为Unicode字符串。

请注意,此预处理允许以下字符根据IDNA2008无效。然而,IDNA2008处理将抓住那些角色。例如,包含IDNA2008中被列为DISALLOWED的字符,例如U+2665(♥) 黑色HEART SUIT将顺利通过预处理步骤,但IDNA2008处理的后续应用程序将失败,并显示错误,表示根据IDNA2008。

4.5实施笔记

可以对Unicode IDNA应用许多优化兼容性处理。这些优化可以改进性能,减少表大小,利用现有的NFKC转换机制等。例如:

注意,输入域名称Unicode IDNA的字符串兼容性处理必须包含所有转义的Unicode代码点转换为Unicode代码点。例如,U+5341号机组(十)CJK统一思想-5341本可以作为以下内容:

示例如所示表2,处理示例以下为:

表2。处理示例

输入 地图 规格化(Normalize) 转换 验证 注释
Bloß.de公司 蓝色.de = 不适用 好 啊 过渡性(已弃用):映射大写和sharp s
布鲁德 = 不适用 好 啊 非过渡性:映射大写
BLOẞ.de(博客) 布鲁德 = 不适用 好 啊 映射大写
xn-blo-7ka.de = = bloß.德 好 啊 Punycode未映射,因此ß永远不会更改(无论是否过渡)。
u¨.com网站 = ü.com网站 不适用 好 啊 规格化(Normalize)变化单位+元音变音ü
xn-tda.com网站 = = ü.com网站 好 啊 Puny代码xn—tda对的更改ü
xn-u-ccb.com网站 = = u¨.com网站 错误 Punycode未映射,但已验证。因为u+变音不是NFC,它失败了。
一个一com 错误 错误 错误 错误 字符“О”是不允许的,因为它在映射时会生成一个点。
xn-a-ecp.ru xn-a-ecp.ru = a 1.ru(音译) 错误 Puny代码xn—a-ecp=一个1.1,它失败了验证。
xn--0.pt xn--0磅 = 错误 错误 Puny代码xn--0无效。
日本語。JP 日本語.日本 = 不适用 好 啊 重新映射全角字符,包括
☕.我们 = = 不适用 好 啊 允许使用Post-Unicode 3.2个字符。

5印尼国家航空公司映射表

对于Unicode中的每个代码点,IDNA映射表提供了以下状态值之一:

如果此状态值为映射,不允许的_STD3_mapped偏差,桌子也是提供该代码点的映射值。

从Unicode开始的每个Unicode版本都提供了一个表5.1,在下的版本化目录中[IDNA-表].每个Unicode标准版本的表将始终是向后兼容表的早期版本:仅具有Status值的字符不允许的可以状态或映射值的更改,例外情况如下:

Unicode 15.1还更改了三个有条件地-不允许的字符,这不是一个例外:

与IDNA2008表不同表被设计为应用于整个域名,而不仅仅是单个标签。该设计提供了IDNA2003处理标签分隔符的数量。特别是,该表的构造是为了禁止使用有问题的字符,例如U+2488(.1.)DIGIT ONE FULLSTOP,其分解包含一个“点”。

Unicode IDNA兼容性处理基于Unicode字符映射特性[NFKC_底座].第6节,映射表推导描述了这些表的派生。喜欢Unicode字符数据库中的派生属性,描述推导的信息。仅IDNA映射表中的数据是本规范应用的规范。

这些文件使用分号分隔的格式,类似于Unicode字符数据库[UAX44型]. 这个领域值列在表2b,数据文件字段以下为:

表2b。数据文件字段

号码 字段 描述
0 代码点 十六进制值或值范围。
1 状态 有效的,忽略,映射,偏离,不允许的,不允许_STD3_valid,不允许的_STD3_mapped
2 映射 十六进制值。仅当状态为忽略,映射,偏离,或不允许STD3_映射
IDNA2008状态 有两个值:NV8型十六NV8型仅当状态为有效的但是IDNA2008将字符从所有域名中排除Unicode版本。十六当字符为IDNA2008排除了现在的Unicode版本。这些不是标准值。

例子:

0000..002C;不允许#NULL。。逗号
002D;有效#HYPHEN-MINUS
...
0041 ; 映射;0061#拉丁文大写字母A...00A1..00A7;有效;NV8#反向防爆标志..剖面标志
公元00年;忽略#SOFT HYPHEN...00DF;偏离;0073 0073#拉丁文小写字母尖S
...
19DA;有效;XV8#5.2新泰勒塔姆数字一号
...

6映射表推导

下面描述映射表的派生。这个描述与中标签的实际映射无关章节4,处理相反,本节描述了中表的派生第5节,印尼国家航空公司映射表。然后,该表被规范地用于映射章节4,处理

推导过程描述为一系列步骤。第1步定义基本映射;步骤2,、和4定义三组字符。第5步将修改基础根据需要映射或字符集以保持向后兼容性。映射和集合都用于第6步生成映射和表的状态值。第7步删除映射中包含无效字符的字符。每个都有编号步骤可能有子步骤:例如,步骤1包括步骤1.1至1.2。

计算进行两次,一次使用UseSTD3ASCIIRules=真,还有一次UseSTD3ASCIIRules=假.代码点那是不允许的具有UseSTD3ASCIIRules=真,但是有效的映射具有UseSTD3ASCIIRules=假,被赋予特殊的状态值不允许_STD3_valid不允许_STD3_mapped。

如果Unicode属性在未来版本中发生更改影响向后兼容性,将添加相应的子句第5步维护兼容性。有关兼容性的更多信息,请参阅章节5,印尼国家航空公司映射表

步骤1:定义基本映射

此步骤指定基本映射,它是来自的映射每个Unicode代码指向零个或多个代码点的序列。这个映射特定代码点C得到的值称为基本映射值of C。C的基本映射值可以是与C相同。

  1. 映射以下异常字符:
    1. 将标签分隔符字符映射到U+002E(.)FULL STOP:
      • U+FF0E(.)全宽全停
      • U+3002(.)思想完全停止
      • U+FF61(“”)半深思想完全停止
    2. 将所有Bidi_Control字符映射到自身
    3. 将U+1E9E(ẞ)拉丁文大写字母SHARP S映射到U+00DF(ß)拉丁文小写字母尖S
  2. 映射每个其他将字符转换为其NFKC_Casefold值[NFKC_底座].

Unicode 6.3添加了不存在的Bidi_Control字符采用Unicode 3.2。为了维护IDNA2003禁止的意图Bidi_控制字符,而不仅仅是忽略它们,步骤1.1.b已添加。此步骤导致步骤6.3禁止所有Bidi_Control字符。

步骤1.1.b只影响Unicode 6.3中添加的5个新字符。它还将影响未来任何新的Bidi_Control字符标准的版本。

步骤1.1.c(在Unicode 15.1中添加)将大写sharp s(ẞ)映射到小写sharp s(ß),而不是映射到ss因为所有主要实现都采用了非转换处理,它不像NFKC_Casefold中那样将ß映射到ss。

步骤2:指定基本有效集

基本有效集由添加和中的减法表3,底座有效集合该定义基于IDNA2003的原则。当应用于Unicode 3.2字符的曲目时生产出一套与IDNA2003紧密一致的产品。

表3。底座有效集合

形式集表示法 描述
\P{何时更改_NFKC_Casefold} 以与其相等的字符开始[NFKC_底座]值。这个标准例如,不包括大写字母以及在NFKC规范化下不稳定,并且默认可忽略代码点。

注意,根据Perl/Java语法,\P表示\p、 所以这些角色不要更改时间根据单独映射[NFKC_底座].

+\u00DF 添加拉丁文小写字母SHARP S(ß)。
-\p{c}-\p{z} 删除未分配、控件、专用、格式、,代理和空白。
-\p{Block=象形文字描述字符} 删除表意文字描述字符。
-\u31EF 删除IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION。
这是在Unicode 15.1中添加的表意文字描述字符在现在填充的Ideographic_Description_Characters块之外。
-\p{ascii}+[\u002Da-zA-Z0-9] 如果使用STD3ASCII规则=True:不允许删除ASCII;'-'有效。
+\p{ascii}-[\u002E] 如果使用STD3ASCII规则=False:添加除用于“.”

步骤3:指定基本排除设置

按以下方式形成基本排除集:

  1. 从空集开始。
  2. 添加每个代码点C,以便:
    1. 根据IDNA2003,C既不被禁止也不未指定或标签分隔符(即,它要么有效,要么映射),
    2. 根据IDNA2003,C与C有不同的映射步骤1中指定的基本映射值。
  3. 添加每个代码点C,以便:
    1. 根据IDNA2003,C是被禁止的,
    2. C位于基本有效集中,或者位于C的基本映射值位于基本有效集中。

例如,对于Unicode 5.2和6.0,基本排除集由以下列表组成。分目(如“案件变更”)是信息性的,不代表原则用于排除它们下面列出的字符。

中具有不同映射的字符IDNA2003(上述第3.2步)

IDNA2003中不允许的字符(上述第3.3步)

步骤4:指定偏差集

这是IDNA2003和IDNA2008。

步骤5:指定向后兼容性的更改

此集合当前为空。上述设置的调整或如果这些步骤会导致已存在的字符以更改未来的状态或映射Unicode版本,以便保持向后兼容性。

步骤6:生成初始状态和映射值

对于每个代码点:

  1. 如果代码点位于偏离设置
    • 状态为偏离和映射value是该代码点的基本映射值。
  2. 否则,如果代码点位于基排除集中或未分配
    • 状态为不允许的而且没有映射表中的值。
  3. 否则,如果代码点不是标签分隔符其基映射值中的某些代码点在基中无效设置
    • 状态为不允许的而且没有映射表中的值。
  4. 否则,如果基础映射值为空字符串
    • 状态为忽略而且没有映射表中的值。
  5. 否则,如果基本映射值与代码相同指向
    • 状态为有效的而且没有映射表中的值。
  6. 否则,
    • 状态为映射和映射value是该代码点的基本映射值。

步骤7:生成最终状态和映射值

处理完前面步骤中的所有代码点后:

  1. 遍历状态为的字符集映射映射值不完全位于有效的设置和偏差套,制作不允许的
  2. 反复应用这些操作,直到不再有状态更改。

例如,对于Unicode 15.1,字符集设置为在中不允许第7步包括以下内容:

注:U+2488(.1.)DIGIT ONE FULL STOP等字符是步骤6.3不允许。

注:在Unicode版本15.0及更早版本中,具有使用STD3ASCII规则=真此步骤中不允许使用其他三个字符:U+2260(≠)、U+226E(☑)和U+226F(≯)。这是基于包含字符的标准分解(NFD)在该设置下无效;该测试对于IDNA处理是不必要的。

7IDNA比较

表4,印尼国家航空公司Unicode 11.0的比较说明了三者之间的差异Unicode 11.0的有效字符库规范。它省略了ASCII代码库代码点,所有在Unicode 11.0中未分配的代码点,以及控制字符,私人使用字符和代理代码点。它还包括标签有效或映射的分隔符。该表分隔了Unicode3.2个字符,因为它们有一个特殊的IDNA2003中的状态。它还将UTS#46和IDNA2008的行为与他们行为不同的地方相同。

表中的每一行定义一个代码点桶在三个规范中共享行为模式。这个列提供以下信息:

表4。Unicode 11.0的IDNA比较

  计数 IDNA2003年 UTS46标准 IDNA2008年 注释和示例
Unicode 3.2(IDNA2003=UTS46=IDNA2008)
86,676 有效 有效 有效 在所有三种情况下都有效
U+00E0(a)拉丁语小带有GRAVE的字母A
b条 431 不允许的 不允许的 不允许的 全部三项均不允许
U+FF01(!)全宽驱逐标记
Unicode 3.2(IDNA2003≠UTS46=IDNA2008)
c(c) 48 有效 不允许的 不允许 Unicode 3.2之后更改的映射
U+2132(Ⅎ)周转资本F
d日 8 已映射 不允许的 不允许的 Unicode 3.2之后更改的映射
U+2F868(㛼)中日韓相容表意文字
Unicode 3.2(IDNA2003=UTS46≠IDNA2008)
e(电子) 4,640 映射/忽略 映射/忽略 不允许的 案例和兼容性变体,默认可忽略项
带GRAVE的U+00C0(ali)拉丁文大写字母A
(f) 3,254 有效 有效 不允许的 标点符号。。。
U+2665(B.3)黑色心形套装
4 映射/忽略 显示:有效
查找:映射/忽略
有效 偏差
U+200C零宽非细木工
U+200D零宽细木工
U+00DF(ß)拉丁文小写字母夏普S
U+03C2()希腊小写字母最终SIGMA
Unicode 4.0到Unicode 11.0(UTS46=IDNA2008)
小时 36,045 查找有效 有效 有效* U+0221(ȡ)带卷曲的拉丁文小写字母D
141 查找有效 不允许的 不允许的 U+0602(؂)阿拉伯脚注标记
Unicode 4.0到Unicode 11.0(UTS46≠IDNA2008)
j个 4,757 查找有效 有效 不允许的 U+2615(☕ ) 热饮料
k个 1,275 查找有效 映射/忽略 不允许的 带笔划的U+023A(Ⱥ)拉丁文大写字母A

该表仅包括Unicode 11.0以下的计数。有关差异的详细在线列表,请访问[DemoIDNChars公司]和[DemoIDN公司].混淆性的含义可以在[DemoConf公司].

7.1对的影响实施者

表4,印尼国家航空公司Unicode 11.0的比较也可以用于对实施者。

如果有任何字符在任何规范中映射/忽略-行(d)、(e)、(k)-然后在其他规范,它们在同样的方法,否则它们将被禁用。这可以防止域名在不同的浏览器上进行不同的映射:字符映射到相同的结果,否则它们不起作用。行(k)没有问题在这方面,假设注册中心遵循规格,因为像U+023A(Ⱥ)这样的字符不会在注册标签中有效。

注:过渡在实践中完成(g)行中的四个有问题的偏差。所有主要实现在UTS46中都将其视为Valid,就像在IDNA2008中一样。

这假定IDNA2008实现不使用自定义,不兼容的映射:也就是说,它们没有利用IDNA2008中允许任意映射的事实,并选择与IDNA2003或UTS#46不兼容的映射。这个属于(e)、(f)、(j)、(k)行中的任何一行。如果自定义映射是被任何重要的客户群使用,都会导致严重后果安全性和互操作性问题。有关更多信息,请参阅的[IDN_FAQ(标识_常见问题解答)].

除上述问题外,实施简单明了:

8合规性测试

每个测试都提供了一个一致性测试文件(IdnaTestV2.txt)从Unicode 6.0开始的Unicode版本(版本控制)目录位于[IDNA-表]. 它只是为提供测试用例UseSTD3ASCIIRules=真

8.1格式

测试文件是UTF-8,使用\易读性的uXXXX或\x{XXXX}约定。详细信息位于测试文件的标题中。

8.2测试一致性

为了测试是否符合UTS#46,实现将执行toUnicode、toAsciiN和toAscii T对源字符串进行操作,然后验证结果字符串和相关的Status值。详细信息位于测试文件的标题中。

实现可能比UTS46的默认设置更严格。特别是,符合IDNA2008的实现将不允许对标记为NV8的行进行输入。实现只需要记录存在错误:它们不需要重现精确的状态代码(在删除任何忽略的状态值后)。

8.3迁移

测试格式和文件名在版本11.0中进行了更改,因此它可以表示人们需要的各种不同的输入选项组合。新的格式允许测试实现通过过滤掉与不受支持的输入标志相对应的状态代码,精确地测试其支持标志组合的结果。值XV8也被删除,因为它在实践中用处不大。

以下说明了新旧格式之间的差异。这组示例并不详尽,但显示了如何为相同的示例提供更多信息。

旧格式采样线:

T;法新社;法新社;fass.de公司N;法新社;法新社;xn-fa-hia.deB类;Bücher.de;bücher.de;xn-断路器-kva.deB;■\u05D0;[B5 B6];【B5 B6】B类;a.、b;[A4_2];[A4_2]

新型采样线:

法新社;法新社;[];       xn-fa-hia.de;fass.de;	Bücher.de;bücher.de;[];       xn-bcher-kva.de;■\u05D0;àא;         [B5-B6];xn--0ca24w;ab;a.b;[A4_2];a.b;

9印尼国家航空公司派生属性

为了便于对Unicode字符数据库的不同版本进行比较并强调添加新字符和更改字符属性的含义,Unicode技术委员会已准备好IDNA衍生财产的收集数据文件。这些数据文件永久发布在[IDNA-衍生].

对于从Unicode 6.1.0开始的每个Unicode标准版本,枚举的IDNA2008_Category属性的值被明确计算和列出在单独的数据文件中。此属性与RFC 5892中定义的“IDNA派生属性”匹配(请参见[IDNA2008年]).为方便实现者,提供了显式列表。它是执行的结果RFC 5892中定义的精确计算与发布同步每个版本的Unicode字符数据库。

RFC 5892给出了重写派生的代码点列表通过异常值。当数据文件已创建,但在IDNA协议的未来更新中添加了例外不可追溯应用。

这些IDNA派生属性数据文件的格式已建模与RFC 5892附录B.1中规定的内容相近,但注释除外每行的部分在第72列处不截断。例如,摘自RFC 5892:

007B。。00B6;禁用#左CURLY括号。。皮尔克罗标志00B7;contextto#中间点00B8..00DE;不允许的#CEDILLA。。拉丁文大写字母THORN00DF。。00F6;PVALID#拉丁文小写字母SHARP S.拉丁文小字母LETT

比较从数据文件中摘录的相同范围:

007B。。00B6;禁用#左CURLY括号。。PILCROW标志00B7;上下文#中间点00B8..00DE;禁用#CEDILLA。。拉丁文大写字母THORN00DF。。00F6;PVALID#拉丁文小写字母SHARP S.拉丁文大写字母O

这种格式上的紧密匹配旨在简化脚本unicode.org上发布的这些IDNA派生属性数据文件之间的比较以及其他基于RFC 5892的现有计算列表张贴在IANA或其他地方。

致谢

马克·戴维斯(Mark Davis)和米歇尔·希格纳德(Michel Suignard)是这篇文章的主要作者文件,在Unicode技术委员会的指导下。对于他们对本规范的想法或文本的贡献编辑们感谢朱莉·艾伦、马蒂亚胡·阿洛奇、彼得·康斯特布尔、克雷格卡明斯、马丁·德斯特、彼得·埃德伯格、阿斯穆斯·弗雷塔格、黛博拉·戈德史密斯、劳伦蒂乌伊恩库、格瓦西·马卡姆、西蒙·蒙塔古、丽莎·摩尔、埃里克·穆勒、,Simon Sapin、Murray Sargent、Markus Scherer、,Jungshik Shin、Shawn Steele、Erik van der Poel、Chris Weber和Ken惠斯勒。规范建立在[IDNA2008年],在IETF Idna-更新工作组中开发,特别是Matitiahu Allouche、Harald Alvestrand、Vint Cerf、,Martin J.Dürst、Lisa Dusseault、Patrik Fältström、Paul Hoffman、Cary卡普(Karp)、约翰·克伦辛(John Klensin)和彼得·莱斯尼克(Peter Resnick),以及[IDNA2003年],作者:Marc Blanchet,Adam科斯特洛、帕特里克·菲利斯特罗姆和保罗·霍夫曼。

工具书类

[博茨迈尔] http://www.bortzmeyer.org/idn-et-phishing.html

这里引用的最有趣的研究(原由Mike BeltznerMozilla公司)是:
[DemoConf公司] https://util.unicode.org/UnicodeJsps/conusables.jsp
[DemoIDN公司] https://util.unicode.org/UnicodeJsps/idna.jsp
[DemoIDNChars公司] https://util.unicode.org/UnicodeJsps/list-unicodest.jsp?a=\p{年龄%3D3.2}-\p{cn}(中文)-\第页{cs}-\p{co}&abb=on&g=uts46+idna+idna2008
[IDNA2003年] IDNA2003规范由IETF RFC集群:
[IDNA2008年] IDNA2008规范由IETF RFC集群:还有一份资料性文件:
[IDNA派生] https://www.unicode.org/Public/idna2008derived网站
[IDNA-表] https://www.unicode.org/Public/idna
[IDN-常见问题解答] https://www.unicode.org/faq/idn.html
[NFKC_底座] 中指定的Unicode属性[UAX44型],并由中的数据定义派生NormalizationProps.txt(搜索“NFKC_Casefold”)。
[RFC1034协议] P.Mockapetris公司“域名-概念和设施”,RFC 10341987年11月。
https://www.rfc-editor.org/info/rfc1034
[RFC3454协议] P.Hoffman,M.Blanchet。“国际弦乐的准备(“stringprep”)“,RFC 34542002年12月。
https://www.rfc-editor.org/info/rfc3454
[RFC3490协议] Faltstrom,P.,Hoffman,P。和A.Costello,“域名国际化应用程序(IDNA)”,RFC 34902003年3月。
https://www.rfc-editor.org/info/rfc3490
[RFC3491号文件] P.Hoffman和M.Blanchet,“Nameprep:国际化域的Stringprep配置文件名称(IDN)”,RFC 34912003年3月。
https://www.rfc-editor.org/info/rfc3491
[RFC3492号文件] Costello,A.,“Punycode:国际化域名的Unicode引导字符串编码应用程序(IDNA)”,RFC 34922003年3月。
https://www.rfc-editor.org/info/rfc3492
[RZLGR5型] 集成面板,“根区域标签生成规则-LGR-5”,2022年5月22日。
https://www.icann.org/sites/default/files/lgr/rz-lgr-5-overview-26may22-en.pdf
[安全浏览] http://code.google.com/api/安全浏览/
[稳定性] Unicode联盟稳定性政策
https://www.unicode.org/policies/stability_policy.html 
[STD3标准] 布雷登,R。,“互联网主机的要求——通信层”、STD 3、RFC 1122和“互联网要求”主机——应用程序和支持”,STD 3,RFC 1123,10月1989
https://www.rfc-editor.org/info/std3
[STD13标准] 莫卡佩特里斯,P。,“域名-概念和设施”,STD 13,RFC1034和“域名-实施和规范”,STD 13,RFC 10351987年11月。
https://www.rfc-editor.org/info/std13
[UAX44型] UAX#44:Unicode码字符数据库
https://www.unicode.org/reports/tr44/
[Unicode码] Unicode标准
有关最新版本,请参阅:
https://www.unicode.org/versions/latest/
[UTR36标准] UTR#36:Unicode码安全注意事项
https://www.unicode.org/reports/tr36/
[UTS18标准] UTS#18:Unicode码正则表达式
https://www.unicode.org/reports/tr18/
[UTS39标准] UTS#39:Unicode码安全机制
https://www.unicode.org/reports/tr39/

修改

以下总结了之前的修改本文档的发布版本。

第31次修订

先前版本的修改在相应版本中列出。