Hello,
da hast Du mir ja jetzt schön 'was eingebrockt :-)
Ich habe selber mal angefangen zu testen und bin sofort auf zwei Hämmer (mit 'ä') gelaufen:
Rahmenbedingungen:
XAMPP Version: 1.8.2
Windows XP SP3 32-bit
(Windows NT PC48 5.1 build 2600 (Windows XP Professional Service Pack 3) i586)
Dateisystem NTFS
PHP-Version 5.4.22
Apache ist eingestellt auf ISO-8859-1
Wenn ich mit einem Upload-Formular einen Dateinamen im <input type="text"> zum Server sende und dann mit diesem Namen mittels touch() eine Datei erzeuge, wird die Im Datei-Explorer auch angezeigt, egal, ob sie Umlaute und Sonderzeichen enthält, oder nicht.
Fall 1: Ich habe keine Dateien mit Sonderzeichen erzeugen lassen:
Mittels glob() kann ich mir die Dateinamen im Verzeichnis auslesen lassen
Fall 2: Ich habe _eine_ Datei mit Sonderzeichen erzeugen lassen:
Glob() schien dann vollkommen zu streiken.
Näher nachgeforscht, steckt der Fehler noch ganz woanders:
$_filelist = glob("*.txt");
$filenames_html = htmlspecialchars(print_r($_filelist, 1));
spätere Ausgabe in
<div><pre><?php echo $filenames_html; ?></pre></div>
liefert nix mehr.
$_filelist = glob("*.txt");
$filenames_html = '';
foreach ($_filelist as $key => $value)
{
$filenames_html .= htmlspecialchars("[$key] => $value\r\n");
}
in der zweiten Variante werden zumindest noch
[2] => Gute_Datei.txt
[3] => Hallo.txt
angezeigt.
Wenn ich stattdessen
<div> <pre><?php var_dump(glob('*.txt')); ?></pre></div>
benutze, kommt als Ergebnis im _selben_Durchlauf_
array(4) {
[0]=>
string(14) "Böse_Datei.txt"
[1]=>
string(20) "Böse_Datei_mit_ß.txt"
[2]=>
string(14) "Gute_Datei.txt"
[3]=>
string(9) "Hallo.txt"
}
wenn ich die "bösen Dateien" wieder aus dem Verzeichnis lösche, funktionieren alle drei Varianten mit gleichem Ergebnis!
Da ist also augenscheinlich ganz mächtig 'was kaputt in PHP. Das zu ergründen, übersteigt aber meine Fähigkeiten und meine Lust dazu.
Ich wäre nur daran interessiert, dass jemand Berufenes das nochmal nachvollzieht und dann einen Bugreport daraus erstellt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg