我的网站允许用户上传任何名称的文件。当然,有些名称将包含非ASCII字符。当用户上传文件时,我将其保存在原始名称的文件夹中。但是,当我尝试下载它时,通过访问它的位置(例如,files/Tolstoy - How much land does a man need?.pdf
),我得到一个404.有没有办法解决这个问题,以便文件保留原始名称?通过Apache,也许?
答案 0 :(得分:1)
嗯,只使用url编码,也称为percent encoding?这是为了处理网络中的网址。打印到HTML的所有网址都应该进行网址编码。
对于PHP,应使用rawurlencode,因为它应符合标准,urlencode不符合。{/ p>
编辑:针对此问题
对于PHP将“é”编码为“e%26%23769%3B”,而不是“e%CC%81”
e%CC%81
, é
为UTF-8。 e%26%23769%3B
将用于é
,这是同一个HTML实体。这意味着您在urlencoding之前正在进行显式htmlentities()调用,或者您的服务器设置会自动执行此操作。如果有适当的字符集(实际上只需要htmlspecialchars调用),则不是严格需要的,但它也不应该破坏任何东西。
如果您想测试一些在线工具:
答案 1 :(得分:0)
解决方法:在上传时将文件名转换为ASCII。你会很高兴的。
答案 2 :(得分:0)
好吧,由于某种原因,我仍然不明白,使用rawurlencode()
代替urlencode()
使其有效。
然而,字符é
(其中,我确定)仍然被奇怪地编码(e%26%23769%3B
而不仅仅是%C3%A9
)。更奇怪的是,包含它的链接起作用。