【发布时间】:2017-07-15 17:45:37
【问题描述】:
在 Windows 上,escapeshellarg 将所有百分号替换为空格:
$ php -r "echo escapeshellarg('%');";
" "
在 Windows 下,此函数将字符串放入双引号中,而不是 单,并用空格替换 %(百分号),这就是它的原因 无法通过此传递名称中包含百分比的文件名 功能。
我想仍然使用escapeshellarg 并且还允许使用百分号字符。在批处理中,您将使用另一个百分号转义一个百分号:
$ echo %%test%%
%test%
显然,您可以通过用独特的东西替换百分号,然后调用escapeshellarg,然后将百分号放回原处来做到这一点:
<?php
$arg = '%';
$uid = uniqid();
echo str_replace($uid, '%%', escapeshellarg(str_replace('%', $uid, $arg)));
// outputs: "%%"
那么,是否有任何已知的解决方法可以绕过此限制并仍然使用
escapeshellarg?
【问题讨论】:
-
我做过的一个解决方法是通过标准输入管道输入一个参数。我对这种解决方法非常不满意。这对我来说是 PHP 的一个巨大限制