Mailinglisten-Archive |
Hallo Werner, Am Montag, 16. Januar 2006 01:35 schrieb Werner Laude: > Am 16.01.2006 01:03 erhielt ich diese mail von Norbert Pfeiffer: > $newfile_ ="öüäabc"; > $fp = fopen ($path."0.$filetype","w"); > fputs ($fp,$newfile); > fclose ($fp); > > Kommt tatsächlich so in der 0.txt an.. $newfile_ und $newfile ist nur ein Tipfehler in der Mail, oder? :-) Also wenn Du $newfile direkt mit "öüäabc" befüllst, funktioniert es. Das bedeutet, daß der Zeichensatz, den Dein Editor verwendet, der Zeichensatz, mit dem die Datei, in der obiger Quelltext steht, und der Zeichensatz, mit dem die Datei 0.txt abgespeichert ist, identisch sind. Ich tippe also mal auf ISO-8859-1 bzw. ISO-8859-15. ;-) > Ich beziehe die Daten von einem längeren script, welches die db > ausliest. Wenn ich den output per > echo $newfile = export_database("usr_web1_1"); > auf den Browser kippe > sieht man u.a. > > INSERT INTO test ( id, text ) > VALUES ( 1, "öööüüävfgdfgdf" ); > INSERT INTO test ( id, text ) > VALUES ( 2, "gfgdfgdfßßßßääöö" ); Jetzt wird es interessant. ;-) Welchen Zeichensatz hat denn Dein Browser für das korrekte Anzeigen des MySQL-Dumps automatisch ausgewählt?!? Das wäre jetzt entscheidend zu wissen. Vermutlich wird das nicht ISO-8859-1 bzw. ISO-8859-15. Also UTF-8? > Wenn ich dann $newfile in die Datei schreiben will, keine Umlaute mehr Also wie Norbert schon sagte, ein Zeichensatz-Problem. Ich sehe da verschiedene Ansatzpunkte. Voraussetzung wäre aber, genau zu wissen, wo welcher Datensatz vorliegt. Ich gehe jetzt mal von folgendem aus: 1. Du verwendest überall (Editor, Dateien, MySQL-Datenbank, Apache-Server) standardmäßig ISO-8859-1 bzw. ISO-8859-15. 2. Dein MySQL-Dump ist aber UTF-8. Erster Ansatzpunkt: Der Export MySQL-Dump. Ich kenne jetzt Deine Datenbankversion (UTF-8-Unterstützung?) nicht, aber grundsätzlich ist es so - das habe ich herausgefunden, als ich meine Website letzte Woche auf UTF-8 umgestellt habe -, daß Du an drei, vier Stellen an den verwendeten Zeichensatz denken mußt: 1. Die Datenbank selbst hat einen Zeichensatz 2. Die Datenbanktabelle hat einen Zeichensatz, ebenso die Textspalten in der Tabelle 3. Die Datenbankverbindung hat ebenfalls einen Zeichensatz! Knackpunkt könnte also Punkt 3 sein. Versuche mal, den Zeichensatz für die Datenbankverbindung unmittelbar vor dem Dump-Befehl explizit zu setzen: SET CHARACTER SET latin1'; Zweiter Ansatzpunkt: Zeichensatzkonvertierung durch PHP. Z.B. mit iconv (-> http://de2.php.net/manual/de/function.iconv.php) oder mb_convert_encoding (http://de2.php.net/manual/de/function.mb-convert-encoding.php) wandelst Du Deinen Dump von UTF-8 in ISO-8859-15 um. Beispiel für iconv: $newfile = inconv('UTF-8', 'ISO-8859-1', $newfile); bzw. $newfile = inconv('UTF-8', 'ISO-8859-15', $newfile); Achtung: iconv und mbstring sind nicht standardmäßig installiert. Du mußt also prüfen, ob die, die Du nutzen willst, bei Dir auch verfügbar ist. Dritter Ansatzpunkt: Der vom Apache verwendete Zeichensatz. Wenn Dein MySQL-Dump UTF-8 ist und PHP dann versucht, UTF-8 in die name.sql-/0.txt-Datei zu schreiben, dann könnte es sein, daß der Apache-Server hier eine Streich spielt, weil er eine Datei mit dem Zeichensatz ISO-8859-1 anlegt und speichert. Stichwort ist hier die Direktive AddDefaultCharset: http://httpd.apache.org/docs/2.0/mod/core.html#adddefaultcharset Du könntest Deine name.sql-/0.txt-Datei ja in ein eigenes Unterverzeichnis schreiben und in diesem Verzeichnis dann eine .htaccess-Datei anlegen, die für dieses Verzeichnis serverseitig den Zeichensatz UTF-8 festlegt: <Directory "/dein_verzeichnis/"> AddDefaultCharset utf-8 </Directory> Das macht aber nur Sinn, wenn Du dann wirklich hinten UTF-8 raushaben willst... ;-) Das scheint ja bei Dir eher nicht der Fall zu sein. Also wird dieser Punkt eher nicht in Frage kommen, außer Du willst auch das mal ausprobieren. :-) So, ich hoffe, daß Du damit schon einige Informationen und Ansatzpunkte hast, um Dein Problem zu lösen. Mehr kann man im Augenblick für Dich nicht tun, weil niemand (außer Dir) all die Informationen über Dein System (s.o.) zur Verfügung, die man zur Lösung Deines Problems bräuchte. Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive