尝试在PHP中创建shell命令时遇到函数str_replace()
的问题。在shell中,当我选中一个有空格的行时,它会出现如下:
tar cvfz destination/filename.zip source/Name\ Of\ The\+\ Folder
所以对我来说,为了通过exec()
运行这个命令,我需要替换PHP中字符串中的任何空格。为了解决这个问题,我正在使用
$q = str_replace(' ', '\ ' , $q);
在我的字符串解析开始时,为了将空格格式化为“\”而不是“”。我遇到的问题是,对于这个特定的文件夹,它也删除了加号,它的格式如下:
tar cvfz destination/Name\ Of\ The\ \ \ Folder.tgz source/Name\ Of\ The\ \ \ Folder
如何进行此设置以便str_replace()
不删除加号?到目前为止,我的有限测试中没有删除任何内容:-, %, @, !, (, *, ), ^, =
答案 0 :(得分:3)
使用字符串函数非常错误,可能会将安全漏洞全开。
PHP有一个名为escapeshellarg()
的函数,可以完全满足您的需求:
escapeshellarg()
在字符串周围添加单引号,并引用/转义任何现有的单引号,允许您将字符串直接传递给shell函数,并将其视为单个安全参数。此函数应用于将单个参数转义为来自用户输入的shell函数。