2017-12-30 28 views
2

Wie kann ich die UTF8-Zeichencodierung mit diesem Code einstellen?Zeichencodierung beim Generieren von XLS-Dateien mit PHP einstellen

Mein Problem ist, dass wenn ich die exportierte Datei in Excel öffnen, muss ich die Codierung manuell festlegen.

$filename = "termekek.xls"; 

     header("Content-Disposition: attachment; filename=\"$filename\""); 
     header("Content-Type: application/vnd.ms-excel"); 

     $flag = false; 
     $result = mysqli_query($kapcs, $sql) or die('SQL error - '.mysqli_error($kapcs)); 
     while($row = mysqli_fetch_assoc($result)) 
     { 
      if(!$flag) 
      { 
       echo implode("\t", array_keys($row)) . "\r\n"; 
       $flag = true; 
      } 
      array_walk($row, __NAMESPACE__ . '\cleanData'); 
      echo implode("\t", array_values($row)) . "\r\n"; 
     } 
     exit; 

Antwort

0

Sie benötigen einen UTF8 BOM (Byte Order Mark) zu senden, nachdem Ihre Header senden und vor den Daten:

$filename = "termekek.xls"; 

header("Content-Disposition: attachment; filename=\"$filename\""); 
header("Content-Type: application/vnd.ms-excel"); 
echo "\xEF\xBB\xBF"; // UTF8 BOM 

$flag = false; 
$result = mysqli_query($kapcs, $sql) or die('SQL error - '.mysqli_error($kapcs)); 

while ($row = mysqli_fetch_assoc($result)) { 
    if (!$flag) { 
     echo implode("\t", array_keys($row)) . "\r\n"; 
     $flag = true; 
    } 
    array_walk($row, __NAMESPACE__ . '\cleanData'); 
    echo implode("\t", array_values($row)) . "\r\n"; 
} 

exit();