在URL中使用Unicode字符的用法

3

这个问题的基础在于,在许多拉丁语言和非拉丁语言中,有一些字母,从我所见,直到最近都不能真正用于URL,并且几乎总是生成大量的URL编码字符。

但是,最近我看到有几个网站在URL中使用本地字母(除了域名)。

例如,像这样使用西班牙重音字母:

https://www.example.com/esta-es-una-frase-en-español
https://www.example.com/cómo-usar-acentos-y-la-letra-ñ-en-urls

另外,我见过这样的URL:

https://www.example.com/урл-на-български

根据我的经验,不久以前,人们必须将重音字符编码或转换为非重音字符。

但现在您可以在浏览器中使用此类型的URL,它不会出现问题,字母显示正常(无需进行URL编码)。

可以安全地假设现在我的URL可以处理这些字符吗?

此外,对于Google的URL索引,是否存在差异?


我假设你正在使用UTF-8编码,而不是Latin1、UTF-16等编码。 - Rick James
我特别指的是URL字符,就是在浏览器地址栏中输入的字符,据我所知,其编码可能与浏览器或操作系统有关。 - Mihail Minkov
1个回答

2
URIs/URLs,由 RFC 3986“统一资源标识符(URI):通用语法”定义,不允许使用未编码的非ASCII字符。这些字符必须进行字符集编码(通常为UTF-8),然后将结果字节八位组进行百分号编码。如果浏览器提供了一个包含未编码Unicode字符的URL,当将其传输到Web服务器时,浏览器通常会在幕后正确地进行url编码。您可以通过浏览器的内置调试器(如果有)或HTTP/S嗅探器来验证这一点。
IRIs,由 RFC 3987“国际化资源标识符(IRI)”定义,允许使用未编码的Unicode字符。然而,IRIs尚未广泛使用,但是IRIs可以通过映射到/从编码的URIs/URLs来保持向后兼容性。可能您的浏览器正在将地址栏的内容视为IRI,并根据需要在内部进行URI/URL转换。

您可以在浏览器地址栏中使用Unicode字符,它们很可能会被编码。但是您不能在自己的URL中使用未编码的 Unicode字符。 - Remy Lebeau
我不完全明白您的意思。您是说如果我编写 https://www.example.com/señor ,那会起作用,但如果我创建一个具有相同URL的HTML链接,它就不起作用了吗? - Mihail Minkov
实际上:https://www.w3.org/International/articles/idn-and-iri/ - Giacomo Catenazzi
所以,@GiacomoCatenazzi,据说这个是可用和兼容的?有没有办法检查兼容性呢?是否有类似caniuse.com这样的工具可以使用?我在那里进行了检查,但似乎没有找到相关内容。 - Mihail Minkov
@MihailMinkov:该文档告诉我们:“与路径相关的IRI部分的转换过程已经在IE7、Firefox、Opera、Safari和Google Chrome的最新版本中得到了本地支持。” 服务器端可能会有更多问题。 维基百科使用它已经很长时间了(因此我认为它是安全的)。 - Giacomo Catenazzi
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接