Hi,
Ich habe es jetzt nochmals mit 3 verschiedenen Funktionen "is_utf8" in Verbindung mit dem normalisierten Dateinamen versucht.
es hilft dir zwar nicht, aber trotzdem nur zur Klarstellung: Was dir Probleme macht, ist die _nicht_ normalisierte Darstellung - also die Darstellung eines Umlauts mit zwei Zeichen (z.B. U+0075, U+0308), die bei der Darstellung kombiniert werden.
Dein Grundproblem fasse ich mal so zusammen:
Die "traditionellen" File-API-Funktionen von Windows verwenden als Codierung implizit Windows-1252. Damit sind viele Unicode-Zeichen nicht darstellbar.
Codierst du Dateinamen, die den vollen Unicode-Zeichenvorrat enthalten könnten, von UTF-8 nach Windows-1252 um, können Zeichen verlorengehen bzw. werden zu '?', weil sie nicht konvertiert werden können.
Lässt du die Umcodierung bleiben, funktioniert zwar aus PHP-Sicht alles, aber die entstehenden Dateinamen sehen verstümmelt aus, weil jedes Byte des UTF-8-Namens als einzelnes Zeichen gemäß Windows-1252 interpretiert wird.
Windows bietet auch alternative Funktionen für die File-API an, die einen großen Teil des Unicode-Zeichenvorrats korrekt verarbeiten könnten, weil sie UCS-2 als Codierung verwenden (ähnlich UTF-16). Diese Funktionen kennt aber PHP unter Windows nicht; du müsstest das komplette PHP-Paket also _mit_ der entsprechenden Option selbst neu compilieren.
Dann hättest du allerdings ein PHP-Build, bei dem Dateinamen immer in UCS-2 übergeben werden *müssen*, und das wäre in den meisten Fällen wieder sehr lästig.
So long,
Martin
In der Theorie stimmen Theorie und Praxis genau überein.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(