php exec mit umlauten

ZeroEnna

Erfahrenes Mitglied
Hallo zusammen

Ich rufe über die exec Funktion von PHP den find Befehl von Linux auf. Das Verzeichnis in dem gesucht wird ist ziemlich verschachtelt und enthält einige tausen Dateien. Die Kombination von exec und find ist bisher die einzige Lösung bei der die Suche in einerm annehmbaren Zeit läuft. Das Codesnippet für die Suche sieht wie folgt aus:

PHP:
setlocale(LC_CTYPE, "de_CH.UTF-8");
$searchString = escapeshellarg("*$searchString*");
$searchDirectory = escapeshellarg($searchDirectory);
$result = array();
exec("find $searchDirectory -type f -iname $searchString", $result);

Jetzt habe ich aber folgendes Problem:

Einige Dateien enthalten Umlaute im Namen. Natürlich muss der User hier die Möglichkeit haben auch nach solchen Dateien zu suchen. Wenn ich den Befehl fix eingebe, also z.B.

PHP:
exec("find $searchDirectory -type f -iname '*ä*'", $result);
,

dann erhalte ich ein korrektes Suchresultat. Sobald ich aber die $searchString Variable einsetze, bekomme ich ein leeres Resultat zurück. Wenn ich die beiden Befehle ausgebe, dann kommt folgendes raus:

mit Userinput:
find '/my/path' -type f -iname '*ä*'

fixe Eingabe:
find '/my/path' -type f -iname '*?*'

Es sieht so aus als wäre das Encoding verschieden. mb_detect_encoding gibt aber für beide Strings UTF-8 zurück.

Hat jemand einen Ansatz wie man das lösen könnte?

Danke und Gruss
ZeroEnna
 
Zurück