Odpovědět na komentář

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);

Odpovědět

  • Webové a e-mailové adresy jsou automaticky převedeny na odkazy.
  • Povolené HTML značky: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <h2> <h3> <h4>
  • You can enable syntax highlighting of source code with the following tags: <code>, <c>, <cpp>, <csharp>, <css>, <drupal5>, <drupal6>, <html>, <java>, <javascript>, <latex>, <mysql>, <php>, <postgresql>, <python>, <ruby>, <sql>, <xml>. The supported tag styles are: <foo>, [foo].
  • Řádky a odstavce se zalomí automaticky.

Více informací o možnostech formátování

CAPTCHA
Tato otázka testuje, jestli jste člověk.
Image CAPTCHA
Vložte znaky z obrázku (bez mezer).

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