Windows erstellt Ordner mittels mkdir in UTF-8 nicht korrekt: Sonderzeichen werden nicht als solche behandelt, sondern als „ecoding-müll“ (är) dargestellt. Die Lösung: Das Encoding des Strings in der Funktion mkdir muss ISO sein.
Beispiel: Aus der DB kommt der Projektname ‚Hallo Bär‘, dieser steht im Array $projectData im Feld ’name‘ und liegt im UTF-8 Encoding vor.
echo mb_detect_encoding($projectData['name']);
$outputdir = $projectData['name'].DIRECTORY_SEPARATOR.date('YmdHis');
echo mb_detect_encoding($outputdir);
mkdir($outputdir,0755,true);
$outputdir2 = mb_convert_encoding($outputdir, 'iso-8859-15');
echo mb_detect_encoding($outputdir2);
mkdir($outputdir2,0755,true);
exit;
Ausgabe ist einmal, dass $outputdir UTF-8 ist, allerdings wird das VZ „Hallo Bär“ als „Hallo Bär“ erstellt, nach der Konvertierung gibt PHP zwar immer noch UTF-8 aus, allerdings wird das VZ nun korrekt erstellt.
Anmerkung: Das ist ein vereinfachter Beispielcode, nicht, dass es hinterher wieder heißt, der Sascha baut keinen schönen Code 😉