Seite 1 von 1

Falsche Sonderzeichen beim Senden von Daten

Verfasst: 04.01.2009, 13:19
von smilla
Hi,

ich stellte meine Frage schon vor ein paar Tagen in einem anderen PHP Forum, bekam dort aber keine Antwort. Da hier auch einige Profis sind, weiß hier vielleicht jemand rat.

ich habe ein Statistik Script für unseren Shop programmiert, wo man sich das Ergebnis als .csv exportieren kann. Hier erstmal mein code:

Code: Alles auswählen

// export
if (isset($_POST['action']) && $_POST['action'] == "export")
{
   $handle = fopen ("export.csv", "w+");
   fwrite($handle, implode("\n", $_POST['export']));
   fclose($handle);
   
   header("Content-Type: text/html; charset=ISO-8859-1");
   header("Content-Type: application/octet-stream");
   header("Content-Disposition: attachment; filename=\"export.csv\"");
   header("Content-Transfer-Encoding: ISO-8859-1\n");
   
   // Datei ausgeben.
   readfile("export.csv");
   exit;
} 
Wenn ich mir die Datei senden lasse, werden Zeichen wie ö falsch dargestellt. Wenn ich es nicht über die Datei laufen lassen, sondern die Daten via echo sende, habe ich das gleiche Problem.

Wenn ich die Datei auf dem Webserver öffne (Ich speichere die ja ab), dann sind die Sonderzeichen korrekt.

Ich habe allesmögliche durchprobiert. Habe auch die Daten direkt gesendet oder Conent-Transfer-Encoding rumprobiert, mit utf8_decode gearbeitet. Ich habe es aber nicht zum laufen bekommen. Ich arbeite immer unter ISO-8859-1.

Hat jemand eine Idee, was ich ändern muss damit der Code richtige Sonderzeichen schreibt? Meiner Meinung nach gehen die bei der Übertragung kaputt, denn das abgespeicherte File ist ja korrekt.

smilla[/code]

Verfasst:
von

Verfasst: 04.01.2009, 13:46
von bloddy newbie
Hallo,

in welcher Kodierung wird der POST Request denn gesendet? Vermutlich in UTF8?

warum lässt du die Daten dann nicht einfach UTF8 sein? Gibt es Probleme mit dem Import im Folgeprogramm?

???? was soll das bei ner CSV Datei?

Code: Alles auswählen

header("Content-Type: text/html; charset=ISO-8859-1");
???? auch nicht viel besser

Code: Alles auswählen

header("Content-Type: application/octet-stream");
Versuchs mal damit und lass den ganzen ISO Schnickschnack raus:

Code: Alles auswählen

header("Content-Type: text/csv; charset=UTF-8");
Bemerkung: text/csv setzt natürlich voraus, dass der Inhalt der Ausgabe auch dem RFC entspricht!

noch was Unklares - liegt in der Post Variable 'export' ein Array vor? Bei einem mehrzeiligen Textfeld (textarea) wäre das so nicht korrekt. Aber wird wohl ein Array sein ;-).

Code: Alles auswählen

fwrite($handle, implode("\n", $_POST['export'])); 
Grüße