PHP 转义文件名的用户输入

php
2022-08-30 12:13:18

我有一个表单,用户可以在其中上传文件,我想将文件命名为.该名称由用户输入,我担心他们输入带有斜杠的内容。否则,如果名字是 .,则可能导致类似的东西。[id]_[lastname]_[firstname].pdf$path = $dir.$filename$path = 'uploads/2_smith_john/hahaimajerk.pdf'john/hahaimajerk

我真的不想强迫用户将他们的名字限制在任何东西;我不介意在文件名中稍微更改他们的名字,只要我能说出原始名称。我需要逃避哪些角色,或者有没有其他方法可以做到这一点?或。。。我只使用吗?mysql_real_escape_string


答案 1

我通常为此使用正则表达式。而不是删除某些特定的字符(如斜杠,点等),我更喜欢只允许某些字符(如字母数字)

例如,这会将任何不是字母、数字、短划线或下划线的字符替换为下划线:

$escaped = preg_replace('/[^A-Za-z0-9_\-]/', '_', $raw);

破折号前面的反斜杠用于对正则表达式中的短划线进行转义,否则破折号用于指定字符范围(如 A-Z)。


答案 2

mysql_real_escape_string不会逃脱斜杠。甚至不会这样做。您将必须使用:escapeshellargstr_replace

$path = str_replace('/', '_', $path);

推荐