Linuchs: Maskierung für die Ausgabe als CSV-Datei

Beitrag lesen

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