danke dir für den Tipp.
Zunächst kam ich nicht klar, weil ich im Sinn hatte, die Werte mit ;
und die Zeilen mit \n
getrennt als Gesamt-String ausgeben zu müssen. So hatte ich es in anderen Projekten schon gemacht.
Missverständlich: „fputcsv — Format line as CSV and write to file“ pointer`
Ein zweidimensionales Array wird benötigt:
$csv_arr = []; // array
$csv_arr[] = [ "lfd", "titel", "sprache", "genre", "texter", "komponist", "verlag", "bearbeiter" ];
$csv_arr[] = [ "", $csv_dateiname ];
$csv_arr[] = [ "", "Test Zeichencode UTF-8 ÄäÖöÜöß Санкт-Петербург" ];
$csv_arr[] = [ "", 'Test " und ; im Feld' ];
while ( $row_csv = @mysql_fetch_assoc( $res_csv )) {
$csv_arr[]
= [
++$lfd
, $row_csv['titel']
, $row_csv['sprache']
, $row_csv['genre']
, $row_csv['texter']
, $row_csv['komponist']
, $row_csv['verlag']
, $row_csv['bearbeiter']
];
}
header('content-type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $csv_dateiname .'"');
$out = fopen('php://output', 'w');
foreach ( $csv_arr as $zeile ) {
fputcsv( $out, $zeile );
}
fclose($out);
exit;
Jetzt klappt es und sieht im LibreOffice Calc (ich hoffe auch im Excel) halbwegs ordentlich aus:
Obwohl kein Platzmangel ist, lappen die russischen Worte ins Nebenfeld. Und warum ist die Datei schreibgeschützt? Wird das durch den HTML header begründet?
Linuchs