首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP:像linux一样转义文件名

PHP:像linux一样转义文件名
EN

Stack Overflow用户
提问于 2011-02-14 23:47:04
回答 4查看 7.8K关注 0票数 4

我有问题的文件名上传的用户,我必须处理。当我尝试访问它们时,因为它们中的一些包含特殊字符,所以所使用的命令显示找不到该文件或类似文件。

我已经使用了escapeshellcmd,但没有成功。

当我在linux控制台中使用"tab“键时(当您开始键入文件名并希望它完成时),bash正确地对文件名进行转义,并且如果我使用的正是那个”转义“的文件名,它就可以工作。

我试过了:

代码语言:javascript
复制
preg_replace("/[^a-zA-Z0-9\-\.\s]/", "\\\\$0", $filename)

转义除数字,字母和空格之外的所有东西...但我发现对于文件"test_1.jpg",此命令会将其转换为"test_1.jpg",但它不起作用,因为"_“不需要转换。

我担心可能会有更多的“允许”字符,所以我的问题是...如何在linux控制台bash中“克隆”tab键的转义功能?

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2013-10-16 22:16:01

如果您希望将文件名用作shell命令参数,则可以使用函数escapeshellarg

票数 3
EN

Stack Overflow用户

发布于 2011-02-14 23:52:11

我将其用于文件名和从博客文章标题中生成URL等。

代码语言:javascript
复制
// 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);
票数 1
EN

Stack Overflow用户

发布于 2011-02-14 23:52:11

如果直接在web服务器上访问这些文件,则文件名需要使用urlencode进行url编码,而不是转义urlencode。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4994119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档