我应该在URL中使用重音字符吗?

时间:2009-09-06 17:59:13

标签: unicode internationalization friendly-url diacritics

当用不同于英语的语言创建网页内容时,会出现搜索引擎优化和用户友好网址的问题。

我想知道在URL中使用去重音字母是否是最佳做法 - 冒着某些词语在有或没有某些重音的情况下具有完全不同含义的风险 - 或者更好地坚持使用非英语字符在适当的时候牺牲了不太高级环境中这些URL的可读性(例如MSIE,查看源代码)。

“异国情调”字母可以出现在任何地方:文档标题,标签,用户名等,因此它们并不总是受到网站维护者的全面监督。

当然,一种可行的方法是设置备用 - 非重音 - 也会指向原始目标的网址,但我想了解您对使用重音网址主要的看法文件标识符。

5 个答案:

答案 0 :(得分:29)

这里没有歧义:RFC3986 says no,即URI不能包含unicode字符,只能包含ASCII。

完全不同的是浏览器在显示URI时如何表示编码字符,例如某些浏览器会在URL中显示空格而不是'%20'。这就是IDN的工作原理:由编码器对编码和编码的惩罚字符串进行编码和解码,所以如果你访问café.com,你真的要访问xn--caf-dma.com。 URL中的unicode字符实际上只是浏览器中的“视觉糖”:如果您使用的浏览器不支持IDN或unicode,编码版本将无法工作,因为URL的基础定义只是不支持它,所以为了使它一致地工作,你需要%编码。

答案 1 :(得分:11)

当遇到类似的问题时,我利用URL rewriting来允许这些页面可以被重音或非重音字符访问。实际的URL类似于

http://www.mysite.com/myresume.html

重写+字符翻译功能允许此参考

http://www.mysite.com/myresumé.html

加载相同的资源。所以为了回答你的问题,作为主要的资源标识符,我将自己限制在0-9,A-Z,a-z和偶尔的连字符。

答案 2 :(得分:10)

考虑带有重音符号的网址往往看起来像这样:

http://fr.wikipedia.org/wiki/%C3%89l%C3%A9phant

...这不太好......我想我们仍然会在一段时间内使用去重音的网址。

尽管如此,事情应该会变得更好,因为网页浏览器现在接受了重音网址。

我目前正在使用的Firefox 3.5以很好的方式显示URL,而不是%stuff,btw;这似乎是自firefox 3.0以来的“新”(见Firefox 3: UTF-8 support in location bar);所以,IE 6中可能不支持,至少 - 并且仍然有太多人使用这个: - (


也许没有重音的网址看起来不是最好的;但是,人们已经习惯了他们,而且似乎对他们一般都很了解。

答案 3 :(得分:5)

您应该避免用户手动在浏览器中输入的URL中的非ASCII字符。对服务器预编码的嵌入式链接没问题。

我们发现浏览器可以用不同的方式对URL进行编码,并且很难弄清楚它使用的是什么编码。请参阅我在这个问题上的问题,

Handling Character Encoding in URI on Tomcat

答案 4 :(得分:2)

完整网址中有几个区域,每个区域可能有不同的规则。 协议是纯ASCII。 DNS条目由IDN(国际域名)规则控制,并且可以包含(大多数)Unicode字符。 路径(在第一个/之后),用户名和密码可以再次成为一切。它们被转义(如%XX),但这些只是字节。这些字节的编码很难知道(由http服务器解释)。 参数部分(在第一个?之后)以“原样”(在%XX unescapeing之后)传递给某些服务器端应用程序(php,asp,jsp,cgi),以及如何解释字节是另一个故事)。 建议路径/用户/密码/参数是utf-8,但不是强制性的,并不是每个人都尊重它。

所以你绝对应该允许非ASCII(我们不再是80年代了),但你用它做的确切可能是棘手的。尝试使用Unicode并远离遗留代码页,如果可以,使用正确的编码/字符集标记内容(使用html中的meta,asp / jsp的语言指令等)