我正在寻找一个 PHP 函数来将字符串清理为没有目录分隔符(斜杠)的安全有效的文件名。
理想情况下,它应该是可逆的,并且不应过度扰乱名称。
当然我想防止故意的目录遍历攻击。但我也想防止创建子文件夹。
我认为这urlencode()
可行,但我想知道这是否足够,和/或是否有更好或更受欢迎的东西。
此外,如果有一些东西在 Windows 上同样有效(反斜杠作为目录分隔符) - 那么该解决方案将是可移植的。
用例/场景:
作为数据导入的一部分,我想将文件从远程 url 下载到本地文件系统中。网址来自 csv 文件。它们中的大多数都可以,但它们可能包含比预期更多的斜线。
例如,它们中的大多数是这样的:
https://files.example.com/pdf/12345.pdf
但随后个别文件可能是这样的:
https://files.example.com/pdf/1/2345.pdf
这些文件都应该进入同一个目录,例如
https://files.example.com/pdf/12345.pdf
->/destination/dir/12345.pdf
类似的文件1/2345.pdf
不应导致子目录。相反,/
应该以某种(可逆)方式转义。例如,使用 urlencode() 这将是1%2F2345.pdf
.