在URL中使用非ASCII字符是否可行?

12

我们目前正在进行一项I18N(国际化)项目。我想知道在URL中包含非ASCII字符会带来哪些复杂性问题。如果不建议这样做,有什么替代方案来解决这个问题呢?

编辑(回应Maxym的答案): 该网站将面向特定国家的用户,无需担心全球公众访问该站点。 我理解从可用性角度来看,这真的很烦人。还有哪些技术问题与此相关吗?


如果您使用非ASCII字符,人们将如何使用标准键盘输入? - wenn32
他们的标准键盘可以处理它。 - Broam
如果你在做国际化网站,那就意味着你要将你的网站翻译成几种语言... 这意味着你期望来自其他国家的人使用你的网站,使得它不再只是本地化的。当然,我可能错了,如果你们国家的人使用几种仅限于你们国家的语言的话。 - Maxym
4个回答

9
使用IDNA可以使用非ASCII /非拉丁域名。此外,您始终可以在URL中使用百分号编码(例如用于空格的%20)。 RFC 3986 建议使用UTF-8编码与百分比结合使用:

首先应将数据编码为UTF-8字符编码的八位字节; 然后只有那些不对应未保留集中的字符的八位字节才应进行百分比编码。 (...) 例如,字符A将表示为“ A”,带重音的大写拉丁字母A将表示为“%C3%80”,片假名字母A将表示为“%E3%82%A2”。

现代客户端(Web浏览器)可以转换百分比编码和Unicode,因此URL作为ASCII传输,但对用户而言看起来很漂亮。
确保您正在使用一个能够理解这种编码的 Web 框架/CMS,以简化来自网站管理员/内容编辑的 URL 输入。

在JavaScript内部进行此转换是否可能?它是否具有此功能的内置功能? - Shayan

4
我认为不行。原因很简单——如果你依赖全球公众,那么让人们输入你的URL将成为一个大问题。我生活在“斯拉夫文”世界,在那里可以创建斯拉夫文URL,但没有人成功过,因为即使我们相当懒惰地改变语言并习惯于打拉丁字母,也无法做到...
更新: 我不能说有什么替代方案,但有时候一些语言有非正式或正式的字母替代,例如在德语中,您可以写Ö,但在URL中您可能会看到OE。此外,您可以考虑使用英语单词或发音类似的单词(这样来自您国家的人就可以记住该写法,而其他“国家”则不会受到妨碍)。

@maxym 如果他只想让俄罗斯人看到这个网站怎么办? - JOE SKEET
@herrow: 在俄语中,你可以使用“音译”(transliteration)......好吧,不知道如何用英语拼写这个词,它的意思是:用拉丁字母(有时甚至使用数字)书写的西里尔字。许多人在这里聊天时使用(很难阅读,但他们无法控制)。 - Maxym
谢谢Maxym!我不担心全球公众,因为这个网站将在一个国家内部运作。 - rkg
1
@Ravi,有时我们会旅行 :) 当我旅行时,99%的情况下我无法使用西里尔字母键盘。而且,考虑到“我的网站非常本地化”并不是考虑未来。今天你这样想,明天你会取得更多成就 :) 要简单灵活! - Maxym
@maxym 如果你在柬埔寨,你不是在学英语,而是在学习如何生存。 - JOE SKEET
显示剩余3条评论

2
取决于目标用户...例如,Nürnberg.de也考虑到了nuernberg.de,以便为德国本地用户提供易于访问的方式(因为德语键盘是默认的,并且所有4个额外的键符号(öäüß)都可用于所有德语使用者),不要忘记I18N的一个目标是为最终用户提供本地语言的感觉。Mac和Linux用户甚至有更多的创新方式,比如在Mac上点击Alt+u将诱导字符中的变音符号来处理I18N输入。

我只是想知道在URL中使用非ASCII字符的复杂性是什么。

但是,从你提出问题的方式来看,似乎你更关心的是 URI 而不是 URL……而且你正在尝试在 URI 中融合 URN 和非 ASCII 字符。如果你知道在服务器上如何解析和处理 URN(例如,在基于 Django 的服务器中,可以使用 url.py 中的正则表达式进行解析和处理),那么这里面就没有任何复杂之处。你需要记住的是,随着 Web2.0(基于 Ajax JavaScript 的)的发展,几乎所有东西都以 utf-8 运行,因为 JavaScript 规范要求 utf-8 编码。因此,utf-8 已经演变成了一种标准。坚持使用 utf-8 编码规范,你在 URI 解析和处理方面几乎不会遇到任何困难。
例如,检查URI http://de.wikipedia.org/wiki/Fürth或http://hi.wikipedia.org/wiki/जर्मनी..无论您在地址栏中使用哪种编码方式编写它,浏览器都会将其转换为UTF-8,并发送到服务器。
注意:除了UTF-8之外,还有一些符号使用百分比编码进行编码。更多信息可以在此处找到...

http://en.wikipedia.org/wiki/Percent-encoding


2
很遗憾 SO 语法没有处理 i18n URI :) - Fred Foo

1

1
现代网络浏览器可以自动处理这个问题。 - Fred Foo
@larsman:但是一些现代网络浏览器故意破坏非拉丁字符的显示,除非在某些情况下,以打击网络钓鱼攻击... - R.. GitHub STOP HELPING ICE

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