Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Excel-Export und UTF-8

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Excel-Export und UTF-8

    Hi

    Wie in anderen Threads schon angeklungen, muß ich wegen einer anstehenden Osterweiterung ein Projekt auf UTF-8 umstellen. Eigentlich war ich der Meinung, dass jetzt alles paßt, bis ich dann noch mal einen Blick auf die Exports von Datenbankinhalten nach MS Excel geworfen habe.

    Ich erstelle eine HTML-Tabelle, die ich wahlweise auf dem Bildschirm darstelle oder eben per
    PHP-Code:
    $datei "TestExcelSheet.xls";
    $inhalt "<html>...<table...</html>";
    $handle fopen($datei,"w");
    fwrite($handle,$inhalt);
    fclose($handle);
    Header('Pragma: public');
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment;  filename=\"$datei\"");
    readfile($datei); 
    als Excel-Datei exportiere.

    Dummerweise habe ich jetzt wieder Zeichensalat im Excel-Sheet, egal ob es um Umlaute oder Kyrillisch geht. Hat jemand 'ne Ahnung, wie ich das gefixt kriege?
    Es ist schon alles gesagt. Nur noch nicht von allen.


  • #2
    Probiers doch mal mit
    PHP-Code:
    header("Content-Type: application/vnd.ms-excel");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    Privatsphäre war gestern, denn:
    Bundestrojaner 2.0: Die neue Version ist da.

    Kommentar


    • #3
      Zitat von Lollix Beitrag anzeigen
      Probiers doch mal mit
      PHP-Code:
      header("Content-Type: application/vnd.ms-excel");
      header("Expires: 0");
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
      Hat leider keinen Effekt. Die Quelldaten sind UTF-8 kodiert. Excel liest das nicht richtig ein. Die Ausgabe desselben Tables auf dem Bildschirm ist einwandfrei. Trotzdem Danke.
      Es ist schon alles gesagt. Nur noch nicht von allen.

      Kommentar


      • #4
        Glaub zwar nicht das es was bringt, aber probier mal:

        PHP-Code:
        header("Content-Type: application/octet-stream; charset=UTF-8"); 

        Kommentar


        • #5
          Zitat von Squall Beitrag anzeigen
          Glaub zwar nicht das es was bringt, aber probier mal:

          PHP-Code:
          header("Content-Type: application/octet-stream; charset=UTF-8"); 
          Danke, hat leider auch nichts gebracht. Werde noch mal genauer lesen, was ein octet-stream ist. Habe so den Verdacht, dass man so einem stream nicht einfach ein charset zuordnen kann.
          Es ist schon alles gesagt. Nur noch nicht von allen.

          Kommentar


          • #6
            Was sollen denn irgendwelche HTTP-Header bringen, wenn Excel eine lokale Datei öffnet ...?


            Vielleicht reicht eine passende BOM schon aus, um Excel klar zu machen, dass es sich um UTF-8 handelt.
            Wenn nicht - dann würde ich mir mal eine von Excel generierte Datei, die explizit als UTF-8 gespeichert wurde (sofern möglich?) anschauen, und vergleichen, um herauszubekommen, welche Info noch fehlen könnte.

            Kommentar


            • #7
              Zitat von ChrisB Beitrag anzeigen
              Was sollen denn irgendwelche HTTP-Header bringen, wenn Excel eine lokale Datei öffnet ...?


              Vielleicht reicht eine passende BOM schon aus, um Excel klar zu machen, dass es sich um UTF-8 handelt.
              Wenn nicht - dann würde ich mir mal eine von Excel generierte Datei, die explizit als UTF-8 gespeichert wurde (sofern möglich?) anschauen, und vergleichen, um herauszubekommen, welche Info noch fehlen könnte.
              Danke an ChrisB. Das war der entscheidende Hinweis. Mit folgender Modifikation hat es geklappt:
              PHP-Code:
              $inhalt iconv('UTF-8','UTF-16LE',$inhalt);
              $handle fopen($datei,"w");
              fwrite($handleb"\xFF\xFE");
              fwrite($handle,$inhalt);fclose($handle);
              Header('Pragma: public');
              header("Content-Type: application/octet-stream;");
              header("Content-Disposition: attachment;  filename=\"$datei\"");
              readfile($datei); 
              Habe also alles von UTF-8 nach UTF-16 (der vermeintlichen Excel/Windows-Kodierung) konvertiert und dann das UTF-16 BOM gesetzt. Na ein Glück, wollte fast schon anfangen, andere Technologien mit viel Aufwand einzuführen.
              Es ist schon alles gesagt. Nur noch nicht von allen.

              Kommentar


              • #8
                Und UTF-8 lassen, und eine UTF-8-BOM davor zu setzen, hat nicht ausgereicht?

                Kommentar


                • #9
                  Zitat von ChrisB Beitrag anzeigen
                  Und UTF-8 lassen, und eine UTF-8-BOM davor zu setzen, hat nicht ausgereicht?
                  Zumindest mit Excel 2000 geht das nicht.
                  Es ist schon alles gesagt. Nur noch nicht von allen.

                  Kommentar

                  Lädt...
                  X