0

我的网站允许用户上传任何名称的文件。当然,有些名称将包含非 ASCII 字符。当用户上传文件时,我将其保存在具有原始名称的文件夹中。但是,当我尝试下载它时,通过访问它的位置(例如,files/Tolstoy - How much land does a man need?.pdf),我得到一个 404。有没有办法解决这个问题,使文件保持原来的名称?通过 Apache,也许?

4

3 回答 3

1

嗯,只是使用 url 编码,也称为百分比编码?这是为了处理 web.xml 中的 url。所有打印到 HTML 的 url 都应该是 url 编码的。

对于 PHP,应该使用rawurlencode ,因为它应该符合标准,而urlencode不是。

编辑:对于这个问题

PHP 将“é”编码为“e%26%23769%3B”,而不是“e%CC%81”

e%CC%81将是 UTF-8 用于. e%26%23769%3B将是 for é,它是相同的 HTML 实体。这意味着您在 urlencoding 之前在那里进行显式 htmlentities() 调用,或者您的服务器设置会自动执行此操作。如果有适当的字符集(实际上只需要 htmlspecialchars 调用),则不需要它,但它也不应该破坏任何东西。

一些在线工具,如果你想测试这些:

于 2013-02-07T21:38:29.790 回答
0

解决方法:在上传时将文件名转换为 ASCII。你会很高兴的。

于 2013-02-07T21:39:23.877 回答
0

好吧,出于某种我仍然不明白的原因,使用rawurlencode()而不是urlencode()使它起作用。

然而,这个字符é(我敢肯定)仍然被奇怪地编码(e%26%23769%3B而不是简单地%C3%A9)。更奇怪的是包含它的链接有效。

于 2013-02-08T00:54:06.027 回答