如何提供带有特殊字符的 HTTP 文件名?

如何提供带有特殊字符的 HTTP 文件名?

以以下博客页面为例:

http://www.roney.com.br/2010/06/20/estados-do-brasil-um-pais-que-precisa-se-unir/

!小心,它嵌入了大量 YouTube 视频,因此加载速度很慢!这是一个巴西网页,用葡萄牙语编写,但托管(根据博客所有者的说法)在美国网络主机上。

有趣的是“Pronúncia”链接,它们链接到包含非 ascii 字符的文件名。看看第二个(Pará):我写这篇文章时的链接是 www.roney.com.br/wp-content/uploads/2010/06/par%E1.mp3(除非他将来在我面前更改它 :)!))

正如您所见,他已经对其进行了编码,但您不知道他在文件系统上实际命名了它什么,或者他们拥有什么系统配置。

如果我在 Firefox 浏览器中点击它,就会出现 404 页面。他声称这些链接对巴西访客有效。我认为这是 100% 服务器的问题,即服务器要么会提供它,要么不会。只是为了好玩,我在 Firefox 中将首选语言设置为葡萄牙语,但正如我所料,这并没有什么区别。

有谁能提供一些见解,说明这在巴西可能如何运作,但在美国却不行,或者我应该在自己的工作站上进行哪些调整,以便它们也能为我服务。

答案1

问题在于 URI 编码。这里它被编码为 iso-8859-1 (latin-1)(然后是百分比编码),但是RFC 3986指出它应该被编码为UTF-8(然后进行百分比编码)。

来源:

有关更多信息维基百科上的百分比编码

实际上RFC 3986

解决方案:

为了让您了解如何解决这个问题,您可以在 PHP 中执行类似的操作。

<?php
echo urlencode(utf8_encode(urldecode('par%E1.mp3')));
?>

请注意,如果您输入整个 URI,斜杠 (/) 也将被编码,从而导致 URI 无效。

相关内容