【问题标题】:Is it advisable to have non-ascii characters in the URL?是否建议在 URL 中使用非 ascii 字符?
【发布时间】:2011-06-08 15:48:41
【问题描述】:

我们目前正在开展一个 I18N 项目。我想知道在 URL 中使用非 ascii 字符有什么复杂性。如果不可取,​​有什么办法可以解决这个问题?

EDIT(响应 Maxym 的回答): 该站点将是特定国家/地区的本地站点,我不必担心全世界的公众访问该站点。我知道从可用性的角度来看,真的很烦人。与此相关的其他技术问题是什么?

【问题讨论】:

  • 如果您使用非 ASCII,人们将如何使用标准键盘进行输入???
  • 他们的标准键盘处理它。
  • 好吧,如果您在 i18n 网站上工作,那么这意味着您会将您的网站翻译成几种语言......这意味着您希望来自其他国家的人,是什么让您的网站不那么本地化: ) 当然我可能是错的,如果您所在国家/地区的人使用的语言很少,仅针对您的国家/地区

标签: language-agnostic url internationalization ascii url-encoding


【解决方案1】:

可以使用IDNA 来使用非ASCII/非拉丁域名。此外,您始终可以在 URL 中使用百分比编码(例如 %20 表示空格)。 RFC 3986 推荐 UTF-8 编码结合百分比:

数据应首先编码为 根据 UTF-8 八位字节 字符编码;那么只有那些 不对应的八位字节 未保留集中的字符 应该是百分比编码的。 (...) 为了 例如,字符 A 将是 表示为“A”,字符 带有 GRAVE 的拉丁文大写字母 A 将表示为“%C3%80”,并且 字符 KATAKANA LETTER A 会 表示为“%E3%82%A2”。

现代客户端(网络浏览器)使用able 在百分比编码和 Unicode 之间来回转换,因此 URL 以 ASCII 格式传输,但对用户来说看起来很漂亮。

确保您使用的网络框架/CMS 也能理解这种编码,以简化来自网站管理员/内容编辑器的 URL 输入。

【讨论】:

  • 是否可以在 JavaScript 中进行这种转换?它有内置功能吗?
【解决方案2】:

我会说不。原因很简单 -> 如果您依赖全球公众,那么人们输入您的网址将是一个大问题。我生活在“西里尔文”世界中,可以创建西里尔文网址,但没有人成功,因为即使我们也很懒惰改变语言并习惯于输入拉丁文......

更新:
我不能说替代品,但有时某些语言有非正式或正式的字母替代品,例如在德语中你可以写 Ö 但在 url 中你可以看到 OE。您也可以考虑英语单词或发音相似的单词(这样您所在国家/地区的人可以记住该文字,其他“国家/地区”不会造成伤害

【讨论】:

  • @maxym 如果他只想让俄罗斯人看到该网站怎么办?
  • @herrow:在俄语中,您可以使用音译...好吧,不知道如何用英语拼写这个词,它的意思是:用拉丁字母写的西里尔字母(有时甚至使用数字)。许多人在这里只是在聊天时使用它(读起来很糟糕,但他们忍不住这样做)
  • 谢谢马克西姆!我不担心全世界的公众,该网站将是一个国家的本地化网站。
  • @Ravi,有时我们会出差 :) 当我出差时 99% 都无法使用西里尔字母键盘。还考虑“我的网站非常本地化”并不是在考虑未来。今天你这么认为,明天你会取得更多成就:)简单灵活!
  • 对不起,我的上一个句子只是完整的。评论:“今天你这么认为,明天你会愿意取得更多成就”
【解决方案3】:

取决于目标用户...例如 Nürnberg.de 还查看 nuernberg.de 以使其易于被本地德语用户访问(因为德语键盘是默认的并且具有所有 4 个额外的键符号 (öäüß)对所有讲德语的人都可用),并且不要忘记 I18N 的目标之一是为最终用户提供母语感觉。 Mac 和 Linux 用户更有主动性,比如在 Mac 上点击 Alt+u 会诱导字符中的变音符号来处理 I18N 输入。

我只是想知道什么是 非ASCII的并发症 URL 中的字符。

但是您提出问题的方式似乎更多地围绕URI, rather then URL... 并且您试图将URN 与URI 中的非ascii 字符融合在一起。如果您知道在服务器(for example: in case of Django based server, the URN can be parsed and handled using regex inside url.py)上解析您的 URN 的位置和方式,那么其中没有任何复杂性。您需要记住的是,随着 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

【讨论】:

  • 很遗憾 SO 语法不能处理 i18n URI :)
  • @PM:谢谢!很好的答案。
【解决方案4】:

您可以在 url 中使用非 ascii 字符,但这很丑,因为特殊字符必须像这样编码: http://www.w3schools.com/tags/ref_urlencode.asp

【讨论】:

  • -1。现代网络浏览器能够自动处理这个问题。
  • @larsman:但一些现代网络浏览器故意破坏非拉丁字符的显示,除非在某些情况下以对抗网络钓鱼攻击......
猜你喜欢
  • 2013-06-19
  • 2020-12-21
  • 2011-06-30
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多