• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

[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.
 

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
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.
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
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
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Habe jetzt schon was Neues.
Wenn ich die Datei mit Safari öffne, stimmt alles!

Mit TextEdit gehts leider noch nicht.
 

_linx_

Kleiner Weinapfel
Registriert
04.01.09
Beiträge
1.125
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...
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Dabei kommt es ganz darauf an, ob man in den TextEdit Einstellungen einen Zeichensatz festlegt, oder diesen automatisch erkennen lässt…