• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

[PHP] fwrite(); & Umlaute

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Liebe -Talker.

Wieder einmal stehe ich mit dem Rücken an der Wand.
Zum Thema habe ich schon alle Tips aus dem Internet ausprobiert… Doch nichts funktioniert.

Ich habe ein kleines Formular, welches die Eingaben in einer Textdatei auf dem Server ablegt.
Zur Hilfe habe ich mir ein kleines Script-Snippet gebastelt, welches mir mein komplettes $_POST array in UTF-8 umschreibt:

Code:
// Zeichensatz von $_POST ändern
function utf8_conv(&$item, $key){ // Wichtig: Die Referenz übergeben
  $item = utf8_decode($item);
}
array_walk_recursive($_POST, 'utf8_conv');

Wenn ich ein Teil davon per echo(); aufrufe, wird dieses auch gut wiedergegeben.
Das heißt, dass beim Speicher-Script alle Eingaben richtig ankommen.
Das Script erstellt eine TXT-Datei und speichert per fwrite(); alles hinein. Allerdings kommt dort wieder ein anderer Zeichensatz an.
Die Umlaute werden dort falsch dargestellt.

Kann ich irgendwie dem fwrite(); sagen, welcher Zeichensatz beim schreiben verwendet werden soll? Oder wird die Datei falsch angelegt?


Vielen Dank für Hilfe.
 
hi, vorweg soweit mir bekannt ist kann php < 6.0 utf-8 als kodierung bei dateien nicht wirklich schreiben, also die kodierung der datei ist nicht utf-8 sondern iso-85...! und ääh, die funktion oben dekodiert daten, die in UTF-8 sind NACH ISO-8859-1 und nicht umgekehrt. :) ansonsten sollte dort utf8-encode stehen.
du könntest entweder die $_POST-vars vor ausgabe schon ins die txt-datei schreiben oder in ein temporäres Array sichern und das dann in die TXT-Datei schreiben, oder du wandelst die vorher in utf-8 umgewandelten Vars (wenns denn so ist) ins entsprechende format. das geht rückwärts z.b. mit utf8-decode oder auch mit iconv, was ich für besser halte.
 
Also. Das Problem ist, dass die Zeichen (Umlaute) nicht richtig dargestellt wurden und auch nicht werden. Seit ich die Funktion oben mit eingebaut habe, werden sie wenigstens per echo(); so dargestellt, wie ich das will.

Jetzt bleibt nur noch die Frage offen, wieso die Zeichen, die ja offensichtlich richtig im Array stehen (per echo(); getestet), nicht richtig in die Datei geschrieben werden können.


Danke für Deine Antwort
 
Habe jetzt schon was Neues.
Wenn ich die Datei mit Safari öffne, stimmt alles!

Mit TextEdit gehts leider noch nicht.
 
Das liegt daran, dass Safari den Zeichencode erkennt und korrekt darstellt. TextEdit kannst du aber keinen Zeichenvode angeben und es behandelt txt-Dateien als ISO-irgendwas, das keine Umlaute unterstüzt...
 
Dabei kommt es ganz darauf an, ob man in den TextEdit Einstellungen einen Zeichensatz festlegt, oder diesen automatisch erkennen lässt…