我应该为文件名转义/清理哪些字符?

Row*_*ker 10 php

我需要清理一些将在文件名中使用的数据.某些数据包含空格和符号字符.是否有一个函数可以转义或清理适合在文件名(或路径)中使用的数据?我在PHP手册的"文件系统功能"部分找不到一个.

所以,假设我必须编写自己的函数,我需要逃避(或更改)哪些字符?

Ric*_*dle 10

对于Windows:

/ \ : * ? " < > |
Run Code Online (Sandbox Code Playgroud)

对于Unix,技术上没什么,但实际上与Windows相同的列表是明智的.

只要您准备在操作文件时在命令行上使用引号,空格或&符号就没有错.

(顺便说一句,我通过尝试将Windows上的文件重命名为包含冒号的内容,并从错误消息中复制来获取该列表.)


Nic*_*sta 5

而不是过滤字符为什么不只是允许[a-z0-9- !@#$%^()]?这比猜测每个可能导致问题的角色更容易.

您的用户不应该需要包含任何其他字符的文件,对吧?


mer*_*uro 5

如果您有机会将原始名称存储在数据库中,我只需创建一个带有随机哈希的文件(mt_rand()/ md5/sha1).好处是您不依赖于底层操作系统(字符/路径长度),用户输入的值或长度,而且很难猜测/伪造文件名.也许甚至base64编码也是一种选择.