[PHP] MySQL-Daten, Excel, exportieren, utf8

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Mirak, 17. September 2011 .

  1. 17. September 2011
    MySQL-Daten, Excel, exportieren, utf8

    Hey Leute

    Die Daten genauer die Umlaute in meiner Datenbank werden in phpMyAdmin nicht richtig angezeigt. Wenn ich diese aber auslese oder bearbeite, dann passt alles. Meine Dateien und die Datenbank sind mit utf8 kodiert.

    Jetzt will ich allerdings meine Daten als Excel-Datei exportieren.

    1. Mac:

    Ich lasse die Daten wie sie sind und erstelle die xls-Datei. Wenn ich mir die xls-Datei jetzt auf meinem Mac mit Numbers öffne kommt eine kleine Fehlermeldung, dann werden die Umlaute richtig angezeigt.

    Fehlermeldung: Dies ist ein tab-delimitiertes Dokument und kein gültiges Excel-Dokument. Die Daten werden möglicherweise anders angezeigt.

    2. PC:

    Ich öffne die Datei mit Excel und die Umlaute werden falsch angezeigt. Auch hier eine Fehlermeldung.

    Fehlermeldung: Sie versuchen eine Datei zu öffnen, NAME, deren Format von dem der Dateierweiterung abweicht.

    Jetzt habe ich etwas mit der Funktion utf8_decode() rum probiert und damit geht es auf dem PC, aber auf dem Mac nicht.

    PHP:
            $select  "SELECT ... FROM ..." ;                  
            
    $export  mysql_query ( $select );  

            
    $header  .=  Kundennummer  "\t" ;
            
    $header  .=  Name  "\t" ;
            
    $header  .=  Postleitzahl  "\t" ;
            
    $header  .=  Stadt  "\t" ;

            while(
    $row  mysql_fetch_row ( $export )) {  
                
    $line  '' ;  
                foreach(
    $row  as  $value ) {                                             
                    if ((!isset(
    $value )) OR ( $value  ==  "" )) {  
                    
    $value  "\t" ;  
                    } else {  
                        
    $value  str_replace ( '"' '""' $value );
                        
    $value  '"'  $value  '"'  "\t" ;
                    }  
                    
    $line  .=  $value
                }
                
                
    $data  .=  trim ( $line ). "\n" ;

            }  
        
        
    $data  str_replace ( "\r" , "" , $data ); 

        
    $currentDate  date ( 'd.m.Y' );
        
    $fileName  'Händler-Liste  ' . $currentDate . '' ;

        
    $rs_count  mysql_query ( 'SELECT ... FROM ...' ) OR die( mysql_error ());
        
    $count_sho  mysql_num_rows ( $rs_count );
        
        
    $fileHead  utf8_decode ( 'Hänlder-Liste' );
        
    $fileColsingCount  utf8_decode ( 'Anzahl der Einträge: ' . $count_sho . '' );
        
    $fileColsingDate  'Stand: '  $currentDate  '' ;
        
    $decodeData  utf8_decode ( $data );
        
        
    header ( "Content-type: application/octet-stream" );  
        
    header ( "Content-Disposition: attachment; filename=" . $fileName . ".xls" );  
        
    header ( "Pragma: no-cache" );  
        
    header ( "Expires: 0" );
        print 
    " $fileHead \n\n $header \n\n $decodeData \n $fileColsingCount \n $fileColsingDate " ;
    Das Script aus dem Netz und ich habe es nur angepasst.

    Weiß einer weiter, wie ich das Skript so hinbekommen, dass es auf Mac und Windows korrekt läuft?

    Danke, Greetz Mirak
     
  2. 17. September 2011
    AW: MySQL-Daten, Excel, exportieren, utf8

    speicher das php-script als utf-8 ohne bom ab
     
  3. 17. September 2011
    AW: MySQL-Daten, Excel, exportieren, utf8

    Meinst du so?

    PHP:
    header ( "Content-type: application/octet-stream; charset: utf-8" );
    Weil das habe ich schon probiert. Ich habe auch schon bei Content-type den passenden Typ für einen Excel-Datei angegeben.

    Was bitte ist bom?

    Danke, BW ist raus.
     
  4. 17. September 2011
    AW: MySQL-Daten, Excel, exportieren, utf8

    nein, nicht so. du musst das script so abspeichern.

    ich weiß nicht welchen editor du verwendest, aber unter notepad++ geht das so:
    Kodierung -> Konvertiere zu UTF-8 ohne BOM

    dann speichern und es sollte funktionieren (utf8_decode natürlich weglassen).

    ein charset über einen header gibt man btw so an:
    PHP:
    header ( "Content-type: ...der typ...; Charset=utf-8" );
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.