CSV Export Mysql > Umlaute defekt

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

  • CSV Export Mysql > Umlaute defekt

    Hallo liebe Community,

    ich habe dieses Thema bereits mehrfach in diesem Forum gefunden – auch im Internet wurde die Frage mehr als einmal gestellt. Es war mir dennoch nicht Möglich das Problem zu lösen, weshalb ich euch hier um Hilfe bitte: Ich exportiere mit Hilfe des folgenden Codes eine Tabelle als CSV:

    PHP-Code:

    <?
    header('Content-type: application/x-octet-stream');
    header("Content-Type: text/x-csv; charset=UTF-8");
    header("Content-disposition: attachment; filename=newsletter.csv");
    require("../config.inc.php");
    $result = mysql_query($sql);
    $ResultPointer = mysql_query("SELECT vorname, name, email FROM newsletter WHERE opt_in=1");


    for($i = 0, $Export = ""; $i < mysql_num_rows($ResultPointer); $i++)
    {
        $Daten = mysql_fetch_object($ResultPointer);
     
        $Spalte[] = str_replace("\"", "\"\"", $Daten->vorname);
        $Spalte[] = str_replace("\"", "\"\"", $Daten->name);
        $Spalte[] = str_replace("\"", "\"\"", $Daten->email);
        
        for($j = 0; $j < count($Spalte); $j++)
        {
            $Export .= "\"" . $Spalte[$j] . "\"";
     
            if($j != count($Spalte)-1)
            {
                $Export .= ";";
            }
        }
        $Export .= "\r\n";
        $Spalte = "";
    }
     
    echo$Export;
    ?>
    Das klappt alles so weit gut, nur dass eben alle Umlaute zerstört sind. Die Kollation der Datenbanktabelle steht auf: utf8_unicode_ci

    Weiß irgendwer, warum das nicht funktionieren will?

    Vielen Dank!

    tm

    P.S: Ich habe zwar gesehen, dass es eine fertige Klasse für PHP > Excel gibt aber ich würde gerne generell verstehen, warum ich das Problem habe und es so lösen.
    Zuletzt geändert von Typomaniac; 14.04.2009, 15:31.

  • #2
    http://dev.mysql.com/doc/refman/5.1/...t-general.html

    Versuchs mal mit SET NAMES utf8.

    Kommentar


    • #3
      Vielen Dank schon mal!

      ich habe das gleich ausprobiert und es hat sich was geändert – allerdings irgendwie nicht so wie ich wollte ;-) Am Beispiel von 2 Namen steht nun jetzt:

      (mit SET NAMES)
      Janßen

      (ohne SET NAMES)
      Janflen

      (mit SET NAMES)
      Müller

      (ohne SET NAMES)
      M¸ller

      Ach so: In der DB selbst (PHPMYADMIN) wird aber alles korrekt dargestellt

      Viele Grüße,

      tm

      Kommentar


      • #4
        in der zusammenstellung muss ich um ein korrektes ergebnis zu bekommen

        $Export .= "\"" . utf8_encode($Spalte[$j]) . "\"";

        benutzen

        Kommentar


        • #5
          Ein utf8_encode() auf einen UTF-8 String anzuwenden ist vollkommen Banane.

          utf8_encode() konvertiert von ISO-8859-1 auf UTF-8.

          http://de.php.net/manual/en/function.utf8-encode.php
          Zuletzt geändert von h3ll; 15.04.2009, 00:15.

          Kommentar


          • #6
            ich kann dir gerne mal die besipiele auf nen server spielen...

            ohne utf8_encode() ist die ausgabe auch bei mir nicht richtig (unter dem gegebenen code)

            du kannst mich nun auch steinigen, weil das überhaupt nciht mein bereich ist, aber kann sowas an der default_charset einstellung liegen ?
            Zuletzt geändert von ; 15.04.2009, 00:23.

            Kommentar


            • #7
              Original geschrieben von Peacie
              ich kann dir gerne mal die besipiele auf nen server spielen...

              ohne utf8_encode() ist die ausgabe auch bei mir nicht richtig (unter dem gegebenen code)
              Dann lieferst du einfach keine UTF-8 Daten.

              UTF-8 ist UTF-8. UTF-8iger wird es nicht mehr.

              Vermutlich hast du einfach nur vergessen die Datenbankverbindung auf UTF-8 zu stellen.

              Falls du die CSV-Datei mit Excel öffnest, musst du Excel bekanntgeben, dass die Datei im UTF-8 Format ist. Alleine erkennt das Excel offenbar nicht.
              Zuletzt geändert von h3ll; 15.04.2009, 00:36.

              Kommentar


              • #8
                natürlich
                beim kopieren des test scriptes hab ich natürlich auch nicht meine db klasse benutzt :/
                sorry

                Kommentar


                • #9
                  Excel? Dann ist mit der Datei wahrscheinlich alles in Ordnung. Excel erkennt UTF-8 grundsätzlich nicht. Und afaik kann man es ihm auch nicht mitteilen.

                  Kommentar


                  • #10
                    Original geschrieben von onemorenerd
                    Excel erkennt UTF-8 grundsätzlich nicht. Und afaik kann man es ihm auch nicht mitteilen.
                    Doch. Man geht im Menü auf öffnen, wählt die CSV-Datei aus und dann kann man den Zeichensatz angeben:

                    Kommentar


                    • #11
                      auch wenn du es nicht hören wolltest, aber ich halte die übergabe von mysql via php nach excell über ein csv dokument nicht als glücklich

                      http://phpexcel.codeplex.com/

                      funktioniert wirklich gut ^^

                      Kommentar


                      • #12
                        Original geschrieben von h3ll
                        Doch. Man geht im Menü auf öffnen, wählt die CSV-Datei aus und dann kann man den Zeichensatz angeben:
                        Bei meinem Excel 2008 für Mac kann man das nicht.

                        Den selben Dialog erhalte ich zwar bei Daten > Externe Daten > Textdatei importieren. Allerdings kann ich dort keinen Zeichensatz wählen, sondern nur den "Dateiursprung" Mac, Windows oder DOS. Dabei geht es nur um das Line Ending - nicht mal das erkennt Excel selbst.

                        Kommentar

                        Lädt...
                        X