Hallo!
Ich plage mich seit längerem mit einer CSV-Datei herum, die über PHP heruntergeladen werden soll.
Was ich gerne hätte ist eine Art universelle UTF-8 Datei für die Anzeige in einem Textprogramm, für Excel oder für Outlook-Adressimport. Ist das irgendwie Möglich oder nur ein Wunschtraum von mir?
Die Daten kommen aus eine MySQL-DB deren "Zeichensatz / Kollation der MySQL-Verbindung" auf utf8_general_ci eingestellt sind und werden mit PHP an den Browser geschickt:
----------
$csv = implode(NL, $csv);
header('Content-Type: text/plain; charset=utf-8');
header("Content-Type: application/force-download");
header('Content-Length: '.strlen($csv));
header('Content-Disposition: attachment; filename="'.$fname.'"');
print $csv;
exit;
----------
$csv enthält die Zeichen "ßüä+ěš"
Folgende Ansätze habe ich gefunden und probiert:
$csv = implode(NL, $csv);
-> Browser: OK, wenn man die Zeichenkodierung auf UTF8 setzt.
-> Excel: kryptisch
-> Outlook: kryptisch
$csv = utf8_decode(implode(NL, $csv));
-> Browser: OK, wenn man die Zeichenkodierung auf ISO-8859-1 setzt. Nur werden die letzen beiden Tschechischen Zeichen nicht erkannt.
-> Excel: kryptisch
-> Outlook: Wie Browser
$csv = "\xEF\xBB\xBF".implode(NL, $csv);
-> Browser: OK, Zeichenkodierung wird erkannt.
-> Excel: kryptisch und "\xEF\xBB\xBF" wird angezeigt
-> Outlook: kryptisch und "\xEF\xBB\xBF" wird angezeigt
$csv = chr(255).chr(254).mb_convert_encoding(implode(NL, $csv), 'UTF-16LE', 'UTF-8');
-> Browser: OK, Zeichenkodierung wird erkannt und auf UTF-16 gesetzt.
-> Excel: OK
-> Outlook: wird nicht angezeigt
Hat damit jemand Erfahrung?
lg lixx