2017-02-24 1 views
1

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?

+0

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

Antwort

0

Dieser Link hat eine gute Erklärung über die Mängel von PHPs sanitization API: https://gist.github.com/Zenexer/40d02da5e07f151adeaeeaa11af9ab36

Es ist unmöglich, eine Universal-Hülle entweicht Funktion, für eine Vielzahl von Gründen zu schreiben.

Grundsätzlich sieht es aus wie escapeshellarg ist sowieso nicht ausreichend sicher.

Ich habe Stdin verwendet, um darüber zu kommen. Es ist ein crumby Workaround, aber es hat die Arbeit für mich erledigt.

Verwandte Themen