Windows上用于百分比符号的PHP escapeshellarg

Windows上用于百分比符号的PHP escapeshellarg,php,windows,escaping,Php,Windows,Escaping,在Windows上,escapeshellarg将所有百分比符号替换为空格: $ php -r "echo escapeshellarg('%');"; " " 其他人也: 在Windows下,此函数将字符串置于双引号中,而不是 单号,并用空格替换%(百分号),这就是为什么 无法通过此文件传递名称中包含百分比的文件名 功能 我希望仍然使用escapeshellarg,并允许使用百分号字符。在批处理中,您将用另一个百分号转义百分号: $ echo %%test%% %test% 显然,您可以通

在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: "%%"

此链接很好地解释了PHPs消毒API的缺点:

由于各种原因,不可能编写通用的shell转义函数

基本上看来,不管怎么说,
escapeshellarg
都不够安全


我一直在用stdin来解决这个问题。这是一个脆弱的解决办法,但它为我完成了工作。

此链接很好地解释了PHPs消毒API的缺点:

由于各种原因,不可能编写通用的shell转义函数

基本上看来,不管怎么说,
escapeshellarg
都不够安全


我一直在用stdin来解决这个问题。这是一个脆弱的解决办法,但它为我完成了工作。

我做过的一个解决办法是通过stdin插入一个论点。我对这种变通办法很不满意。这对我来说是PHPOne的一个巨大限制,我所做的工作是通过stdin插入一个参数。我对这种变通办法很不满意。这对我来说是PHP的一个巨大限制