Tach!
beim Schreiben in Dateien (und überhaupt beim Datentransport) muss die Kodierung ausgeschaltet sein. Das wäre zu prüfen. Die Kodierung spielt nur innerhalb eines Programmes (egal ob das MSWord, PHP oder C ist) eine Rolle. Dateien hingegen kennen keine Kodierung.
Formuliere dies bitte nochmal neu und besser.
Es steckt ja ein Fünkchen Wahrheit drin, nämlich, dass man jede Schicht einzeln betrachten muss. Welches ist denn diejenige, die der (persistenten) Speicherung am nächtsten ist? Welche folgt dann? Usw...?
Das Thema ist nicht Perl, und deswegen interessieren keine Perl-spezifischen Geschichten. "Kodierung ausschalten" zum Beispiel ist nichts, das für PHP eine Bedeutung hätte. Das existiert hier nicht. Stattdessen muss man dafür sorgen, dass die Strings korrekt kodiert sind, die man zusammenfügen und/oder an Dateien anhängen möchte.
Ja, PHP hat immer noch keine vollständige Multibyte-Unterstützung. Es arbeitet nach wie vor hauptsächlich auf Byte-Ebene. Ein String ist quasi nur ein Array of Bytes. Möchte man eine konkrete Kodierung beachten, muss man die Multibyte-Funktionen verwenden, oder einigen anderen Funktionen die verwendete Kodierung dieser Strings per Parameter mitteilen.
Wie auch immer, für den vorliegenden Fall ist es prinzipiell recht einfach. Der Teufel steckt in den Details. Generell ist es sinnvoll, wenn man Daten entgegennimmt, diese in ein Rohformat zu bringen. Das ist das Format, mit dem man im Kern des Programms alle Berechnungen und Manipulationen anstellen möchte. Da der gesamte Zeichenvorrat von Unicode verarbeitet werden soll, ist UTF-8 eine sinnvolle Möglichkeit für das "Roh"format. Das heißt also, dass Eingabedaten gegebenenfalls nach UTF-8 umkodiert werden müssen. Ebenso sind sämtliche Transportkodierungen zu entfernen (zum Beispiel Base64 oder URL-Encodierung).
Sollen Daten ausgegeben werden, muss gegebenenfalls umkodiert werden und eventuelle Kodierungen für den Transport berücksichtigt werden.
Neben Umkodierungen an Ein- und Ausgängen ist auch noch zu beachten, dass der Rest der Verarbeitung auf UTF-8 aufbaut. Das betrifft vor allem die Code-Dateien des Programms, wenn darin Nicht-ASCII-Zeichen in Litralen vorkommen.
dedlfix.