Oft kommt es vor, dass vom Kunden der Export von Daten nach Excel gewünscht ist. Der einfachste und schnellste Weg führt dabei oft über das CSV-Format. Doch wenn unter Windows in MS Excel die über PHP (fputcsv) erzeugte CSV geöffnet wird, werden Umlaute und Sonderzeiche (ÖÜÄüöäß) meist sonderbar dargestellt.
Grund hierfür ist der falsche Zeichensatz. Je nach Konfiguration des Servers werden die Daten zumeist im ISO-8859-1 oder UTF-8 geschrieben bzw. übertragen.
Excel erwartet jedoch standardmässig den Windows-1252 Zeichensatz. Folgende kleine Funktion hilft bei der Konvertierung der Zeichen vor der Verwendung von z.B. fputcsv :
<?
function convertToWindowsCharset($string) {
$charset = mb_detect_encoding(
$string,
"UTF-8, ISO-8859-1, ISO-8859-15",
true
);
$string = mb_convert_encoding($string, "Windows-1252", $charset);
return $string;
}
?>




und weshalb geht das nicht?
$fp = fopen(‘csv/file.csv’, ‘a’);
foreach ($felder as $fields) {
$fields = mb_convert_encoding($fields, “Windows-1252″);
fputcsv($fp, $fields,’;',’”‘);
Hallo Tom,
ich habe deinen Code mal erweitert, so dass er funktionieren sollte.
<?
$fp = fopen('csv/file.csv', 'a');
$converted_fields = array();
foreach ($felder as $value) {
$converted_fields[] = mb_convert_encoding($value, "Windows-1252");
}
fputcsv($fp, $converted_fields,';','"');
fclose($fp);
?>
Du kannst folgende Zeile auch tauschen mit der oben beschriebenen Funktion:
$converted_fields[] = mb_convert_encoding($value, "Windows-1252");Dann müsste sie entsprechend so aussehen:
$converted_fields[] = convertToWindowsCharset($value);Durch Verwendung der Funktion
mb_detect_encodingstellen wir das Verhalten beim Ermitteln des Zeichensatzes sicher. Ohne den$charsetwürdemb_convert_encodingstandardmässig die Ermittlung entsprechendmb_detect_order()vornehmen. Dies Reihenfolge und ob es “Stricted” ist, ist dann je nach Konfiguration in der php.ini unterschiedlich.$charset = mb_detect_encoding(
$string,
"UTF-8, ISO-8859-1, ISO-8859-15", // Reihenfolge
true // Strict-Mode
);
Weitere Informationen zu den Sachen findest du hier:
http://www.php.net/manual/de/function.mb-detect-encoding.php
http://www.php.net/manual/de/function.mb-convert-encoding.php
Viele Grüße
Pierre
Ich versuche derzeit ein Formular auszuwerten und die daten per csv zu versenden aber bei mir macht er die umlaute zu komischen zeichen.
habe es mit
$fp = fopen('excel.csv', 'w');
$produkte[0][0]= "Anrede";
$produkte[0][1]= "Name";
$produkte[0][2]= "Vorname";
$produkte[0][3]= "Geburtstag";
$produkte[0][4]= "Geburtsmonat";
$produkte[0][5]= "Geburtsjahr";
$produkte[0][6]= "Straße";
$produkte[0][7]= "Straßennummer";
$produkte[0][8]= "Ort";
$produkte[0][9]= "Postleitzahl";
$produkte[0][10]= "Familie";
$produkte[0][11]= "Öffentlicherdienst";
$produkte[0][12]= "Anrede Partner";
$produkte[0][13]= "Name Partner";
$produkte[1][0]= $_COOKIE['anrede'];
$produkte[1][1]= $_COOKIE['name'];
$produkte[1][2]= $_COOKIE['vorname'];
$produkte[1][3]= $_COOKIE['geburtstag'];
$produkte[1][4]= $_COOKIE['geburtsmonat'];
$produkte[1][5]= $_COOKIE['geburtsjahr'];
$produkte[1][6]= $_COOKIE['strasze'];
$produkte[1][7]= $_COOKIE['straszennr'];
$produkte[1][8]= $_COOKIE['ort'];
$produkte[1][9]= $_COOKIE['plz'];
$produkte[1][10]= $_COOKIE['familie'];
$produkte[1][11]= $_COOKIE['od'];
$produkte[1][12]= $_COOKIE['anrede_partner'];
$produkte[1][13]= $_COOKIE['name_partner'];
foreach ($produkte as $fields) {
$fields[] = mb_convert_encoding($str, "UTF-8");
fputcsv($fp, $fields, ';');
}
fclose($fp);
versucht.
aber wenn ich dann die datei mit excel öffne habe ich wieder komische zeichen drin.
sry hatt sich erledigt war nur zu doof zum importieren -.-