Tach!
ich habe eine Textdatei die Umlaute wie ß. Ö und ä enthält. Diese Ursprungs-Textdatei ist als UTF8 angespeichert.
Ein PHP Script mit UTF8 Header (<meta http-equiv="Content-Type" content="text/html; charset=utf-8">) liest diese Datei ein, macht ein paar Ersetzungen und speichert diese wieder ab.
Für PHP-Dateien gibt es keine Möglichkeit zur Angabe der Kodierung, in der sie gespeichert ist - sieht man mal von der Möglichkeit einer BOM ab. Die Kodierungsangabe in Richtung Browser ist für den Vorgang irrelevant, weil nur mit einer lokalen Datei gearbeitet wird. Da PHP noch nicht UTF-8-fähig ist, kann es den Inhalt der Datei nur anhand der Bytes verarbeiten. Das heißt also, dass Literale, die in deinem Quelltext stehen, mit denselben Bytes geschrieben sein müssen wie in der Datendatei. Sprich: Deine PHP-Datei muss als UTF-8 gespeichert sein.
Wenn ich die neue gespeicherte Datei dann mit Notepad++ anschaue, stehen die Umlaute "falsch" drin. z.b. anstatt
Groß => GroÃ
anstatt
Broschüre => Broschüre
Ich verstehe nicht warum?
Dann musst du mal genauer untersuchen, was wirklich ist. Auch für einfache Textdateien gibt es keine Metadaten, die in irgendeiner Weise ihre Kodierung verraten würden (außer dem Spezialfall BOM). Wenn du die Datei also öffnest, liest sie das öffnende Programm entweder zufällig gemäß der richtigen Kodierung oder du gibst explizit eine an. Beim Öffnen mit Notepad++ kann man keine Kodierung angeben, man kann sie nur nach dem Öffnen im Menü Encoding umstellen.
Außerdem empfiehlt es sich im Zweifelsfall mit einem Hexeditor nachzuschauen, was nun konkret für Bytes in der Datei stehen. Notepad++ kennt dazu ein Plugin namens HEX-Editor.
dedlfix.