以下面的博客页面为例:
http://www.roney.com.br/2010/06/20/estados-do-brasil-um-pais-que-precisa-se-unir/
!小心,它embedded了大量的youtub,所以是一个缓慢的负载! 这是一个巴西的网页,用葡萄牙语写的,但是在美国的虚拟主机上托pipe(根据博客的所有者)。
感兴趣的是它们链接到包含非ascii字符的文件名的“Pronúncia”链接。 看第二个(对于帕拉):我写的链接是www.roney.com.br/wp-content/uploads/2010/06/par%E1.mp3(除非他从我的下面改变它未来 :)!))
正如你所看到的,他已经编码了,但是你不知道的是他在文件系统上实际命名了什么,或者他们有什么系统configuration。
如果我在我的Firefox浏览器中单击它,我会看到他们的404页面。 他声称这些链接正在为巴西游客工作。 我以为这是一个100%的服务器的东西,即服务器将服务它,否则不会。 只是为了笑,我在Firefox中将首选语言设置为葡萄牙语,但正如我所怀疑的那样,这没有任何区别。
任何人都可以提供任何有关如何在巴西而不是在美国工作的见解,或者我会在自己的工作站上调整什么东西,以便他们也能为我服务。
问题在于URI编码。 在这里它被编码为iso-8859-1(latin-1)(然后百分比编码),但是RFC 3986指出它应该被编码为UTF-8(然后百分比编码)。
资源:
有关维基百科百分比编码的更多信息。
实际的RFC 3986 。
解:
为了给你一个关于如何解决这个问题的想法,你可以在PHP中做这样的事情。
<?php echo urlencode(utf8_encode(urldecode('par%E1.mp3'))); ?>
请注意,如果您放置整个URI,则斜线(/)也将被编码,从而使URI无效。