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

Unicode 我应该在URL中使用重音字符吗?,unicode,internationalization,friendly-url,diacritics,Unicode,Internationalization,Friendly Url,Diacritics,当人们用不同于英语的语言创建web内容时,搜索引擎优化和用户友好URL的问题就会出现 我想知道在URL中使用不带重音的字母是不是最好的做法——冒着有些单词有完全不同的含义,有或没有特定的重音的风险——或者最好在适当的情况下坚持使用非英语字符,牺牲这些URL在不太先进的环境中的可读性(例如MSIE、查看源) “异国情调”信件可能出现在任何地方:文档标题、标签、用户名等,因此它们并不总是在网站维护者的完全监督下 当然,一种可能的方法是设置指向原始目的地的备用(非重音)URL,但我想了解您对使用重音U

当人们用不同于英语的语言创建web内容时,搜索引擎优化和用户友好URL的问题就会出现

我想知道在URL中使用不带重音的字母是不是最好的做法——冒着有些单词有完全不同的含义,有或没有特定的重音的风险——或者最好在适当的情况下坚持使用非英语字符,牺牲这些URL在不太先进的环境中的可读性(例如MSIE、查看源)

“异国情调”信件可能出现在任何地方:文档标题、标签、用户名等,因此它们并不总是在网站维护者的完全监督下


当然,一种可能的方法是设置指向原始目的地的备用(非重音)URL,但我想了解您对使用重音URL作为主要文档标识符的看法。

考虑带重音的URL通常会以如下方式结束:

http://fr.wikipedia.org/wiki/%C3%89l%C3%A9phant
…这不是很好…我想我们在一段时间内仍然会使用去重音的URL

不过,事情应该会变得更好,因为重音URL现在已经被web浏览器所接受

我目前使用的firefox 3.5显示URL的方式很好,而且没有使用%stuff,顺便说一句;这似乎是firefox 3.0以来的“新”功能(请参阅);因此,至少在IE 6中可能不受支持——仍然有很多人在使用这一功能:-(



也许不带重音的URL看起来并不是最好的;但是,人们还是习惯了它们,并且似乎对它们的理解很好。

当遇到类似的问题时,我利用了允许带重音或不带重音的字符访问这些页面。实际的URL类似于

http://www.mysite.com/myresume.html
重写+字符转换功能允许这种引用

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

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

您应该避免用户在浏览器中手动输入URL中的非ASCII字符。对于服务器预编码的嵌入式链接,这是可以的

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


完整URL中有几个区域,每个区域可能有不同的规则。 该协议是纯ASCII协议。 DNS条目由IDN(国际域名)规则管理,可以包含(大多数)Unicode字符。 路径(在第一个/、用户名和密码之后)也可以是所有内容。它们被转义(作为%XX),但这些只是字节。很难知道这些字节的编码(由http服务器解释)。 参数部分(在第一个之后?)按“原样”(在%XX unescaping之后)传递给一些服务器端应用程序(php、asp、jsp、cgi),如何解释字节则是另一回事)。 建议path/user/password/arguments为utf-8,但不是强制性的,而且并非所有人都尊重这一点


因此,您肯定应该允许使用非ASCII(我们不再是80年代了),但具体如何处理可能会比较棘手。尝试使用Unicode,远离遗留代码页,如果可以的话,使用适当的编码/字符集标记您的内容(在html中使用meta、asp/jsp的语言指令等)这里没有歧义:,即URI不能包含unicode字符,只能包含ASCII字符


另一个完全不同的问题是浏览器在显示URI时如何表示编码字符,例如,一些浏览器将在URL中显示空格而不是“%20”。IDN也是这样工作的:浏览器会动态地对punycoded字符串进行编码和解码,因此,如果您访问café.com,您实际上是在访问xn--caf-dma.comURL中的be unicode字符实际上只是浏览器的“视觉糖”:如果您使用的浏览器不支持IDN或unicode,编码版本将无法工作,因为URL的基本定义根本不支持它,所以要使其一致工作,您需要%encode。

一个有趣的问题是“我应该在URL中使用中文(或其他一些外来语言)字符吗?”“外来”似乎有点主观,只是一个限定词,相当局限于可以被视为“非外来”的字符(即非重音拉丁字符);人们不应该使用例如“非ascii”?因此,考虑到音译,
ṃỹṛèşưḿ“< <代码> >将在同一个资源中描述?或者你有一个特定的映射吗?是的。映射是任何重音字符->对应的非重音字符。虽然你引用的例子是一个极端情况,但我认为它是映射的一个主要无害的结果。当然,相反的观点当然是最受欢迎的!这个Cou.ld可能会造成重复内容问题。让一个以上的URI访问一个资源通常不是一个好主意吗?@Nathangesbrecht-是的,如果这是您关心的问题,它可能会。在这种情况下,我会在页面上放置一个。这仍然很糟糕,因为如果用户副本将url粘贴到其他浏览器中,它将无法正常工作。Wikipeida正在使用口音:你读过我写的吗?HTML可以包含非ASCII字符,浏览器可以从页面上下文中读取知道要使用什么编码的内容,但它会向该字符串的URL编码版本发出请求,即URL本身不支持非ASCII字符。