首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于非英语字符而言,RFC 3986中的“不区分大小写”意味着什么?

问对于非英语字符而言,RFC 3986中的“不区分大小写”意味着什么?
EN

Stack Overflow用户
提问于 2011-10-15 20:14:36
回答 1查看 1.1K关注 0票数 7

RFC 3986指定URI的主机组件‘大小写不敏感’。然而,它没有指定什么‘不区分大小写’的UCS或UTF-8字符。

在RFC中给出的例子(例如"<HTTP://www.EXAMPLE.com/>等价于<http://www.example.com/>")允许我们推断‘不区分大小写’意味着字符are至少被认为等同于UTF-8字符集中它们前面的字符32,即a-z。但是,没有提到应该如何对待这个范围之外的字符。因此,考虑到www.OLÉ.com的非编码、非标准化注册名称,我认为RFC允许三种可能的标准化形式:

  1. 小写到www.olé.com,然后百分比编码到www.ol%E9.com
  2. 小写仅A-Z字符到www.olÉ.com,然后百分比编码到www.ol%C9.com
  3. 百分比编码到www.OL%C9.com,然后将非百分比编码部分小写到www.ol%C9.com,产生与2相同的结果。

所以问题是:哪个是正确的?如果是案例1,什么定义了哪些字符被认为是大写,哪些被认为是小写(以及哪些字符没有大小写)?

EN

回答 1

Stack Overflow用户

发布于 2015-10-30 03:05:39

由DNS解析的主机名总是小写的。

它是在DNS主机名中不可能有UTF-8字符。 (RFC 1123),然而,一个解决办法已经与“国际化域名”。这种解决方法通常称为双数码。

Punycode允许用ASCII字符表示非ASCII字符。

非ASCII字符由在主机名称标签(字母、数字和连字符)中允许的ASCII字符表示。-- https://www.ietf.org/rfc/rfc3492.txt

至于您在问题(www.olé.com)中提供的示例,要解决的域名不是www.ol%E9.com。

如果您在域名中得到百分比符号,这意味着您有URL编码的主机名,这是不正确的,至少不能解决。

例如,具有如下所示的a标记将正确工作:

代码语言:javascript
复制
<a href="//www.ol%C3%A9.com">Click Here</a>

但是,DNS服务器将不解析www.ol%C3%A9.com,而是将转换后的域名解析为punycode:

示例

代码语言:javascript
复制
www.ol%C3%A9.com

变成了

代码语言:javascript
复制
www.olé.com

在“小语码”中翻译为:

代码语言:javascript
复制
www.xn--ol-cja.com

Web浏览器通常会将大写字符转换为小写版本。例如,www.olé.com和www.olÉ.com都转换为相同的DNS主机名(www.xn--ol-cja.com),因为www.olÉ.com被降低到www.olé.com。

我推荐两种工具来检查IDN域名,以了解一个域名在经过双码翻译后会是什么样子:

维瑞信的IDN工具要严格得多。尝试这两种工具,以www.olÉ.com作为输入,以了解我的意思。

IDNA (应用程序的国际化域名)的规则很复杂,但是有两个主要的RFC值得一看:

rfc5894 3.1.3节指定在下列情况下可能不允许字符:

  • 该字符是通过Unicode大小写折叠映射到另一个字符的大写形式或其他形式。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7780359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档