Wiedmann wrote:Lass es mich so sagen:
Ein Dateiname den PHP anlegt, kann es auch selbst wieder lesen. Du musst also nur dafür sorgen, dass die Dateinamen (Strings in PHP) 'utf-8' kodiert sind. Das funktionert dann mit jedem OS/Dateisystem.
Hm, was heißt das nun genau? Prinzipiell ist der benötigte Weg ja:
Filesystem, scandir (?)
--> PHP (UTF-8 )
--> MySQL (UTF-8 )
--> PHP (UTF-8 )
--> Filesystem, fopen etc. (?)
Nur bei MySQL bin ich mir sicher dass die gespeicherten Strings UTF8 sind, bislang funktioniert auch alles, bspw. wenn ich in einer Form Japanisches UTF-8 eingebe oder Lautschrift oder Arabisch. Es wird korrekt gespeichert, gelesen und ausgegeben (über Umweg XML-XSLT).
Also scheint die gesamte interne Verarbeitung zu funktionieren, interessanterweise ist bei mir allerdings kein 'internal_encoding' gesetzt. Doch das dürfte ja nur einen Effekt haben bei strlen() und Konsorten, dachte ich zumindest?
Der Witz ist ja, dass es bei äöü funktioniert, das heißt ja dass prinzipiell der Part FS --> UTF-8 --> FS funktioniert, denn die Umlaute haben ja in UTF-8 eine vollkommen andere Kodierung als in ISO, Windows etc.
Und auf diesem Weg mache ich zwei mal iconv(), von Windows1251 nach UTF-8 und zurück.
Mit dem 'Cross' muss ich noch mal schauen, da könnte auch etwas anderes passieren, denn er speichert den Namen des Albums korrekt, nur der Dateiname (in dem das 'Cross' wieder vorkommt) scheint kein UTF-8 zu sein (Ausgabe zeigt FF3-Hex-Rechteck statt 'Cross').
Aber interessant sind die kyrillischen Zeichen, wenn ich das Array von scandir() direkt wieder dumpe, sind alle solchen Zeichen zu Fragezeichen mutiert. Unabhängig vom Encoding für die Seite wohlgemerkt...
Unter Windows sieht ein echtes Windowsprogramm bei diesen Dateinamen dagegen nur Murx, kann sie aber öffnen. Mit einer Datei mit einem richtigen Unicodedateinamen, von einem Windowsprogramm erzeugt, kann PHP dagegen gar nichts anfangen). Da du ja aber eine Webanwendungen schreiben willst, ist das ja hier normal vernachlässigbar.
Also getaggt und benannt werden die MP3s derzeit mit Mp3Tag, danach irgendwie auf den Server geladen, ab da greift PHP zum Katalogisieren.
Aber irgendwie verstehe ich den Absatz von Dir nicht ganz. Bedeutet das, dass Windows resp. NTFS kein festes Encoding hat? Also dass per default im Windows1251 Encoding benannt wird, aber pro Datei die Option besteht ein anderes Encoding (UTF-8, oder weitere?) zu verwenden?
Das würde vielleicht das komische Verhalten teilweise erklären, denn die kyrillischen Zeichen wurden von o.g. Tool vom Tag in den Dateinamen übernommen. Das 'Cross' wurde nur bei den MP3s selbst von dem Tool erzeugt, vielleicht auch ein Indiz für das Unterschiedliche Verhalten von Order und Dateien...
So, viel schlauer bin ich jetzt leider auch nicht...