使用str_replace删除exec()的空格

时间:2012-08-12 21:16:34

标签: php

尝试在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()不删除加号?到目前为止,我的有限测试中没有删除任何内容:-, %, @, !, (, *, ), ^, =

1 个答案:

答案 0 :(得分:3)

使用字符串函数非常错误,可能会将安全漏洞全开。

PHP有一个名为escapeshellarg()的函数,可以完全满足您的需求:

  

escapeshellarg()在字符串周围添加单引号,并引用/转义任何现有的单引号,允许您将字符串直接传递给shell函数,并将其视为单个安全参数。此函数应用于将单个参数转义为来自用户输入的shell函数。