Vytváříme UTF-8 CSV pro Excel

Občas potřebujete vyexportovat nějakou tu tabulku pro Excel a další tabulkové editory. CSV uložené v kódování UTF-8 se zdá být dostatečně univerzálním formátem, aby si s ním poradilo programové vybavení každého počítače.

Ovšem zdání klame. Pokud vytvoříte "obyčejné" UTF-8 CSV, zmlsaný Excel z něj dostane vyrážku v podobě rozsypaného čaje u znaků ležících mimo ASCII.

Naštěstí existuje kouzelný lektvar s kódovým označením BOM (Byte order mark), který nemoc našeho CSV vyléčí. Jsou to tři magické bajty, které je třeba umístit na úplný začátek CSV. Excel podle těchto bytů pozná, že soubor je v UTF-8. Bohužel problém může nastat u editorů, které BOM nepodporují.

Kód pro report stavu majetku vaší firmy:

//headers
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=export.csv;');
header('Content-Transfer-Encoding: binary'); 
 
//open file pointer to standard output
$fp = fopen('php://output', 'w');
 
//add BOM to fix UTF-8 in Excel
fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
if ($fp)
{
  fputcsv($fp, array("Cars", "Planes", "Ships"), ";");
  fputcsv($fp, array("12", "2", "6"), ";");
  fputcsv($fp, array("23", "3", "5"), ";");
  fputcsv($fp, array("31", "5", "8"), ";");
}
 
fclose($fp);
Obrázek uživatele Anonym

Fakt dekuju moc ;) taky mi to vyresilo pomerne rozsahly problem ;)

Obrázek uživatele Anonym

Tohle mě zachránilo, děkuju!

Obrázek uživatele Anonym

Přesně ... také moc díky :)


© 2012 Vladislav Skoumal |
Webmail Domů Zpět nahoru