Hallo,
ich erzeuge aus einer Datenbanktabelle CSV-Dateien zum Datenexport.
Die Daten sind UTF8-kodiert.
Wenn ich die heruntergeladene CSV-Datei nun beispielsweise mit OpenOffice oder Firefox öffne, dann erkennt die Anwendung allerdings nicht, daß es sich um UTF-8 handelt, sondern zeigt das Dokument zunächst als ISO-xxx-Dokument an, also mit fehlenden Sonderzeichen.
Ich muß die richtige Kodierung dann immer erst auswählen (dann werden natürlich alle Zeichen korrekt angezeigt).
Gibt es eine Möglichkeit, der CSV-Datei direkt den Zeichensatz mitzugeben?
Untenstehend mein bisheriger Code.
Und noch eine kleine Zusatzfrage: kann es sein, daß utf8_decode() native Zeilenumbrüche verändert, so daß nl2br() darauf nicht mehr anwendbar ist?
Thanx und ciao,
ein immer wieder vom Zeichensatzkram verwirrter Andreas
Der Code:
ob_start();
$csv_data = $db_handler->get_csv_dump($_POST["data_table"], stripslashes($_POST["field_separator"]), stripslashes($_POST["text_delimiter"]));
$file_name = $_POST["data_table"]."_".date("Y"."_"."m"."_"."d", time()).".csv";
$file_handle = fopen("/tmp/".$file_name, "w+");
fputs($file_handle, $csv_data);
fclose($file_handle);
$content_length = (int) filesize("/tmp/".$file_name);
// For more information on headers see user comments on
// http://de3.php.net/manual/en/function.header.php
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
//header('Content-Transfer-Encoding: none');
header('Content-Transfer-Encoding: utf-8');
header('Content-Type: text/csv; name="'.$file_name.'"');
header("Content-Disposition: attachment; filename="$file_name"");
header("Content-length: $content_length");
readfile("/tmp/".$file_name);
unlink("/tmp/".$file_name);
ob_flush();
exit;