Unter Windows escapeshellarg
alle Prozentzeichen mit Platz ersetzt:PHP escapeshellarg unter Windows für Prozentzeichen
$ php -r "echo escapeshellarg('%');";
" "
Jemand anderes auch mentioned this on php.net:
Unter Windows setzt diese Funktion Zeichenfolge in doppelte Anführungszeichen , nicht Single, und ersetzt% (Prozentzeichen) durch ein Leerzeichen, deshalb ist es unmöglich, einen Dateinamen mit Prozent in seinem Namen durch diese Funktion zu übergeben.
Ich möchte immer noch escapeshellarg
verwenden und auch für Prozentzeichen Zeichen. Im Batch würden Sie ein Prozentzeichen mit einem anderen Prozentzeichen entkommen:
$ echo %%test%%
%test%
Offensichtlich könnten Sie dies tun, indem die Prozentzeichen mit etwas Einmaliges zu ersetzen, dann escapeshellarg
aufrufen und dann die Prozentzeichen setzen zurück:
<?php
$arg = '%';
$uid = uniqid();
echo str_replace($uid, '%%', escapeshellarg(str_replace('%', $uid, $arg)));
// outputs: "%%"
Gibt es also eine bekannte Problemumgehung, diese Einschränkung zu umgehen und weiterhin escapeshellarg
zu verwenden?
Eine Problemumgehung, die ich getan habe, ist ein Argument durch stdin zu pipen. Ich bin mit dieser Problemumgehung nicht sehr zufrieden. Dies ist für mich eine enorme Einschränkung von PHP – TinyTheBrontosaurus