最初,网址的域部分全部为 ASCII(因此没有重音符号、没有表情符号、没有汉字)。由于称为国际化域名(IDN) 的东西,这在很久以前就得到了扩展。
今天,理论上,您可以使用您喜欢的任何 Unicode 字符作为域名的一部分,包括表情符号。这是否明智是另一回事。
标准怎么说?给定一个域名,我们应该识别它的标签。它们通常由点 (.) 分隔成标签:www.microsoft.com 有三个标签。但您也可以使用其他 Unicode 字符作为分隔符( .、.、。、。)。每个标签都经过进一步处理。如果全部是 ASCII,则保留原样。否则,我们必须根据 RFC 3454 执行以下操作后将其转换为称为“punycode”的 ASCII 码:
- 映射字符( RFC 3454 第 3 节),
- 规范化( RFC 3454 第 4 节),
- 拒绝禁用字符,
- 根据未分配的代码点选择性地拒绝(第 7 节)。
然后你会得到punycode 算法。还有一些条件需要满足,比如ASCII格式的域名不能超过255字节。
这是相当多的工作。目标是将每个 Unicode 域名转录为 ASCII 域名。你会希望它是一个定义明确的算法:给定一个 Unicode 域名,应该有一个唯一的输出。
让我们选择一个常见的非 ASCII 字符,即字母 ß,称为 Eszett。让我创建一个与这个角色的链接:
如果你点击这个链接会发生什么?结果取决于您的浏览器。如果您使用的是 Microsoft Edge、Google Chrome 或 Brave 浏览器,您最终可能会访问https://messagefactory.ca/ 。如果您使用的是 Safari 或 Firefox,您最终可能会访问https://xn--meagefactory-m9a.ca 。当然,您的结果可能因具体系统而异。在 ios (iPhone) 下,我希望无论您的浏览器如何,Safari 行为都会占上风。
不是我所期望的。