URL中的Unicode字符

2010年,您会在大型门户网站上提供包含UTF-8字符的url吗?

根据URL上的RFC,禁止Unicode字符(请参阅此处 )。 他们必须百分比编码符合标准。

但是我的主要观点是提供未编码字符的唯一目的是看起来漂亮的URL,所以百分比编码已经不存在了。

所有的主stream浏览器似乎都是parsing这些URL,不pipeRFC说什么。 然而,我的一般印象是,离开networking浏览器的领域时,它变得非常不稳固:

  • 将URL复制粘贴到文本文件,电子邮件,甚至是具有不同编码的网站
  • HTTP客户端库
  • 异国情调的浏览器,RSS阅读器

我的印象是正确的,在这里可能会遇到麻烦,因此,如果您服务于非技术性的受众群体,那么这不是一个实际的解决scheme,重要的是即使引用并传递了所有链接也能正常工作。

是否有一些神奇的方式在HTML中提供漂亮的url

http://www.example.com/düsseldorf?neighbourhood=Lörick 

可以复制+粘贴完整的特殊字符,但在旧客户端重复使用时可以正常工作?

使用百分比编码。 现代浏览器将照顾显示和粘贴问题,并使其人类可读。 例如, http://ko.wikipedia.org/wiki/ 위 키 백 과 : 대 문

编辑:当你在Firefox中复制这样一个URL时,剪贴板将保存百分比编码的表单(这通常是一件好事),但是如果只复制其中的一部分,它将保持未编码状态。

什么Tgr说。 背景:

 http://www.example.com/düsseldorf?neighbourhood=Lörick 

这不是一个URI。 但这一个IRI 。

您不能将IRI包含在HTML4文档中; 像href这样的属性types被定义为URI而不是IRI。 有些浏览器无论如何都会处理IRI,但这不是一个好主意。

要将IRI编码为URI,请使用path和查询部分,使用UTF-8编码,然后百分比编码非ASCII字节:

 http://www.example.com/d%C3%BCsseldorf?neighbourhood=L%C3%B6rick 

如果在IRI的主机名部分有非ASCII字符,例如。 http://例え.テスト/ ,它们使用Punycode进行编码。

现在你有一个URI。 这是一个丑陋的URI。 但是大多数浏览器会为你隐藏:复制并粘贴到地址栏中,或者在链接中跟着它,你会看到它与原始的Unicode字符一起显示。 维基百科已经使用了这么多年,例如:

 http://en.wikipedia.org/wiki/ɸ 

一个浏览器的行为是不可预知的,并不总是显示漂亮的IRI版本是…

…呃,你知道的。

根据您的URLscheme,您可以使UTF-8编码部分“不重要”。 例如,如果您查看堆栈溢出URL,它们具有以下forms:

  http://stackoverflow.com/questions/2742852/unicode-characters-in-urls 

但是,服务器实际上并不关心在标识符错误之后是否获得了部分,所以这也适用:

  http://stackoverflow.com/questions/2742852/これは,これを日本语のテキストです 

所以如果你有这样的布局,那么你可以在标识符之后的部分中使用UTF-8,如果它出现乱码也没关系。 当然这可能只适用于某些特殊的情况

不知道这是不是一个好主意,但正如其他评论中提到的,当我解释它时,许多Unicode字符在HTML5 URL中都是有效的

例如, href文档说http://www.w3.org/TR/html5/links.html#attr-hyperlink-href

a和area元素上的href属性的值必须是可能被空格包围的有效URL。

然后,“有效URL”的定义指向http://url.spec.whatwg.org/,URL定义如下:;

ASCII字母数字“!”,“$”,“&”,“'”,“(”,“)”,“*”,“+”,“,”,“ – ”,“。”,“/” ,“+”,“+”,“+”,“+”,“+”, U + U000000至U + 1FFFD,U + 20000至U + 2FFFD,U + 30000至U + 3FFFD,U + 40000至U + 4FFFD,U + 50000至U + 5FFFD,U + 60000到U + 6FFFD,U + 70000到U + 7FFFD,U + 80000到U + 8FFFD,U + 90000到U + 9FFFD,U + A0000到U + AFFFD,U + B0000到U + BFFFD,U +到U + CFFFD,U + D0000到U + DFFFD,U + E1000到U + EFFFD,U + F0000到U + FFFFD,U + 100000到U + 10FFFD。

然后在parsingalgorithm的几个部分中使用术语“URL代码点”,例如相对path状态

如果c不是一个URL代码点而不是“%”,则parsing错误。

另外validation器http://validator.w3.org/传递类似;"你好" URL,并且不传递具有诸如空格"ab"字符的URL

由于所有这些评论都是真实的,所以您应该注意,就ICANN批准阿拉伯文(波斯文)和中文字符被注册为域名而言,所有浏览器制作公司(微软,Mozilla,苹果等)都必须在没有任何编码的情况下在URL中支持Unicode,这些应该可以由Google等search。

所以这个问题将尽快解决。

对我来说,这是正确的方法,这只是工作:

  $linker = rawurldecode("$link"); <a href="<?php echo $link;?>" target="_blank"><?php echo $linker ;?></a> 

这工作,现在链接显示正常:

http://newspaper.annahar.com/article/121638 – 音乐 – video – audio – video – audio – video

链接find:

http://www.galeriejaninerubeiz.com/newsite/news

使用百分比编码的forms 。 一些(主要是旧的)运行Windows XP的计算机例如不支持Unicode,而是ISO编码。 这就是百分比编码的URL被发明出来的原因。 另外,如果您向用户提供打印在纸上的URL,其中包含无法轻松input的字符,则该用户可能很难打字(或者只是忽略它)。 百分比编码格式甚至可以用在许多历史最悠久的机器中(尽pipe它们当然不支持互联网)。

尽pipe如此,还是有一个缺点,因为编码百分比的字符比原来的要长,因此可能会导致很长的URL。 但只是试图忽略它,或者使用一个URL shortener(在这种情况下,我会build议goo.gl ,这使得一个13个字符的URL)。 此外,如果您不想注册Google帐户,请尝试bit.ly (bit.ly使稍长的URL,长度为14个字符)。