2016-07-30 31 views
0

Ich würde gerne Sonderzeichen an einen Shell-Befehl übergeben, aber escapeshellcmd() lässt mich nicht. Wie maskiere ich sie, damit sie durchkommen?php: prevent escapeshellcmd() vom Entfernen von Sonderzeichen

Beispiel:

<?php 
$specialchars='I would like to print a µ'; 
$escaped_specialchar=escapeshellcmd($specialchars); 
echo $escaped_specialchar; 
?> 

Antwort

1

Sie könnten zuerst eine weiße Liste erstellen, in dem Sie die Sonderzeichen definieren, die angezeigt werden sind ok. Legen Sie auch eine Zeichenfolge fest, mit der Sie die Zeichen ersetzen können.

Ersetzen Sie dann die Zeichen in Ihrem Befehl durch die Zeichenfolge. Entkomme deinem Befehl.

Schalten Sie die Sonderzeichen wieder ein, indem Sie die Zeichenfolge ersetzen.

So:

$allowedCharakters = array(
    'µ' => 'microUThingie', 
); 

$specialchars='I would like to print a µ'; 

foreach ($allowedCharakters as $key => $value) { 
    $specialchars = str_replace($key, $value, $specialchars); 
} 

$escaped_specialchar=escapeshellcmd($specialchars); 

foreach ($allowedCharakters as $key => $value) { 
    $escaped_specialchar = str_replace($value, $key, $specialchars); 
} 
+0

brillant, danke – Heliosh