名称中包含hash(#)的文件无法在web浏览器中打开


file with hash (#) in its name does not open in web browser

我有一个简单的phpweb应用程序,用户可以在其中上传一个文件。上传的文件可以被其他用户访问。它运行得很好,最近一个用户上传了一个名为filename#2234324的文件。当我通过web应用程序打开这个文件时,它给了我一个错误,文件名不存在。这是由于文件名中存在(#(,浏览器无法正确定位。我该怎么办?我不想更改文件名

#在URL中具有特殊含义。您需要用它们的编码等价百分比来表示这些字符。

在将文件名添加到URL之前,通过urlencode传递该文件名。

(当用户上传名为"><script>etc</script>的文件时,这也将保护您免受XSS的影响(。

我该怎么办?我不想更改文件名

你真的应该这么做。URL的哈希部分不会发送到服务器,而是保留给客户端(浏览器(进行解释。只有协议、服务器、路径名和查询字符串被发送到服务器。

作为任何好的文件上传系统的一部分,您应该强制执行有效的文件名或根据需要修改它们。