1

str_replace()在尝试在 PHP 中创建 shell 命令时遇到了函数问题。在 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()不删除加号?从我到目前为止的有限测试中,它并没有从中删除任何内容:-, %, @, !, (, *, ), ^, =

4

1 回答 1

3

为此使用字符串函数是非常错误的,并且可能会留下很大的安全漏洞

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

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

于 2012-08-12T21:17:56.753 回答