为什么WP要对包含URL的Unicode(UTF8)进行编码?Unicode url有什么缺点吗?

时间:2019-01-15 作者:T.Todua

我很感兴趣,如果我有一个slug中带有unicode字符的类别,即
ა-ბ
wp在html源代码中输出,如:
%e1%83%98-%92%90

但是,我可以停止该功能(使用term_link 过滤器),并直接输出包含链接的UTF8。然而,这会有什么缺点吗?为什么WP会自我转换?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

没有真正的unicode URL减去某种编码这样的东西。如果试图将unicode字符写入URL,浏览器会对其进行编码。地址栏中出现的unicode字符纯粹是UI帮助。

URL中的Unicode,用于域后的位,例如。/page 我们需要根据另一个规范进行url编码,例如PHP函数url_encode

所以ヒキワリ.ナットウ 成为%E3%83%92%E3%82%AD%E3%83%AF%E3%83%AA.%E3%83%8A%E3%83%83%E3%83%88%E3%82%A6.

如果您尝试在URL中插入空格并将其转换为%20

看见https://www.w3.org/International/O-URL-and-ident.html 有关如何将URL RFC不支持的UTF-8字符转换为带%

国际化资源标识符(IRI)是一个新的协议元素,是对URI的补充【RFC2396】。IRI是通用字符集(Unicode/ISO10646)中的字符序列。有一个从IRIs到URI的映射,这意味着可以在适当的情况下使用IRIs代替URI来标识资源。

。。。

URI的国际化很重要,因为URI可能包含来自使用ASCII以外字符的各种协议或格式的各种信息。RFC 2396中定义的URI语法目前只允许作为ASCII的子集,大约60个字符。它还定义了一种将任意字节编码为URI字符的方法:一个%后跟两个十六进制数字(%HH转义)。但是,由于历史原因,在使用%HH转义之前,它没有定义如何将任意字符编码为字节。

在几年前讨论的各种解决方案中,UTF-8作为URI的首选字符编码被认为是最好的。这与IRI到URI的转换一致,该转换使用UTF-8编码,然后使用%hh转义:

而且https://www.w3.org/International/articles/idn-and-iri/

域中的Unicode这有点不同,不使用基于百分比的编码。

浏览器做了很多繁重的工作来向您隐藏这种编码。E、 g。http://JP納豆.例.jp, 您可以复制粘贴URL、访问URL等,但如果您尝试查看源代码,您将看到URL实际上是view-source:http://xn--jp-cd2fp15c.xn--fsq.jp/

阅读本文了解更多信息:

https://www.w3.org/International/articles/idn-and-iri/

由于历史的原因,TLDR URL只允许有非常有限的字符子集,当CERN和美国以外的人开始使用它时,这并不好。商定了标准和规范,以适合不适合ascii子集的字符。

因此WordPress正在将漂亮的URL转换为真实的URL。否则,您将在匹配和搜索数据库时遇到各种各样的问题。

到MySQL,ヒキワリ.ナットウ%E3%83%92%E3%82%AD%E3%83%AF%E3%83%AA.%E3%83%8A%E3%83%83%E3%83%88%E3%82%A6, 所以WordPress使用后者,因为这是实际的URL。ヒキワリ.ナットウ 只是人性化的有益视觉

更具体地说,WP在输入时转换它,而不是在输出时。如果禁用该选项,则会发生两件事,第一件事是html不再验证,第二件事是浏览器在您尝试使用URL时将其转换为编码值。但是,有些软件可能不会进行这种转换,如果您将unicode字符直接放在HTTP请求中,这可能会破坏一切

相关推荐

Altered Media Library URLs

我有一个客户的网站,是在他们离开另一家代理机构后我找到的。该机构使用了一个专有主题和自己的自托管页面生成器,以防止其在除他们之外的任何其他托管环境中更新或编辑。它的另一个方面是重新映射主题的URL并上载目录。因此,例如,代替WP在中查找主题文件http://domain.com/wp-content/themes/…. 它在里面找他们http://domain.com/t/….同样,对于图像上载,也可以在http://domain.com/wp-content/uploads/…, 它在里面找他们http