在Windows上,escapeshellarg
用空格替换所有百分号:
$ php -r "echo escapeshellarg('%');";
" "
其他人也mentioned this on php.net:
在Windows下,此函数将字符串放入双引号中,而不是 单,并用空格替换%(百分号),这就是它的原因 不可能通过此名称传递名称中包含百分比的文件名 功能
我仍然希望使用escapeshellarg
并允许百分号字符。在批处理中,您将使用另一个百分号来转义百分号:
$ echo %%test%%
%test%
显然,你可以通过用唯一的东西替换百分号,然后调用escapeshellarg
然后再回复百分号来实现这一点:
<?php
$arg = '%';
$uid = uniqid();
echo str_replace($uid, '%%', escapeshellarg(str_replace('%', $uid, $arg)));
// outputs: "%%"
那么,是否有任何已知的解决方法可以绕过此限制并仍然使用
escapeshellarg
?
答案 0 :(得分:0)
此链接对PHPs清理API的缺点有一个很好的解释:https://gist.github.com/Zenexer/40d02da5e07f151adeaeeaa11af9ab36
出于各种原因,编写通用shell转义函数是不可能的。
基本上看起来escapeshellarg
无论如何都不够安全。
我一直在使用stdin来解决这个问题。这是一个糟糕的解决方法,但它为我完成了工作。