我的网站允许用户上传任何名称的文件。当然,有些名称将包含非 ASCII 字符。当用户上传文件时,我将其保存在具有原始名称的文件夹中。但是,当我尝试下载它时,通过访问它的位置(例如,files/Tolstoy - How much land does a man need?.pdf
),我得到一个 404。有没有办法解决这个问题,使文件保持原来的名称?通过 Apache,也许?
问问题
1728 次
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 调用),则不需要它,但它也不应该破坏任何东西。
一些在线工具,如果你想测试这些:
- http://htmlentities.net/测试来回转换html实体
- http://www.hypergurl.com/urlencode.html来回测试 url 编码,使用 UTF-8 和 ASCII
于 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 回答