我有问题的文件名上传的用户,我必须处理。当我尝试访问它们时,因为它们中的一些包含特殊字符,所以所使用的命令显示找不到该文件或类似文件。
我已经使用了escapeshellcmd,但没有成功。
当我在linux控制台中使用"tab“键时(当您开始键入文件名并希望它完成时),bash正确地对文件名进行转义,并且如果我使用的正是那个”转义“的文件名,它就可以工作。
我试过了:
preg_replace("/[^a-zA-Z0-9\-\.\s]/", "\\\\$0", $filename)
转义除数字,字母和空格之外的所有东西...但我发现对于文件"test_1.jpg",此命令会将其转换为"test_1.jpg",但它不起作用,因为"_“不需要转换。
我担心可能会有更多的“允许”字符,所以我的问题是...如何在linux控制台bash中“克隆”tab键的转义功能?
谢谢!
发布于 2013-10-16 22:16:01
如果您希望将文件名用作shell命令参数,则可以使用函数escapeshellarg。
发布于 2011-02-14 23:52:11
我将其用于文件名和从博客文章标题中生成URL等。
// everything to lower and no spaces begin or end
$path = strtolower(trim($path));
// adding - for spaces and union characters
$find = array(' ', '&', '\r\n', '\n', '+',',');
$path = str_replace ($find, '-', $path);
//delete and replace rest of special chars
$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
$repl = array('', '-', '');
$path = preg_replace ($find, $repl, $path);
发布于 2011-02-14 23:52:11
如果直接在web服务器上访问这些文件,则文件名需要使用urlencode进行url编码,而不是转义urlencode。
https://stackoverflow.com/questions/4994119
复制相似问题