Hallo Daniel,
Stimmt, es wird "nun", statt dem Euro Zeichen, das "a<kästchen>¬" angezeigt, wenn ich kein utf8_decode() mache. Mache ich das utf8_decode, um die Umlaute anzeigen zu können, wird aus dem Euro ein ?.
Es freut Dich bestimmt nicht, das zu hören, aber PHP verhält sich hier vollkommen korrekt. Das PHP-Manual sagt zu utf8_decode:
utf8_decode — Converts a string with ISO-8859-1 characters encoded with UTF-8 to single-byte ISO-8859-1
Das wolltest Du ja auch. Das Problem ist aber, dass ISO-8859-1 das Euro-Zeichen nicht enthält. Daher fügt PHP bei der Konvertierung ein Fragezeichen ein.
Du könntest alle Euro-Zeichen durch die entsprechende HTML-Entität (€) ersetzen, das geht aber nicht für eine CSV-Datei. Also musst Du einen anderen Zeichensatz für Deine Datei verwenden.
Da gibt es zwei sinnvolle Lösungen:
* Du gibst die Datei einfach als UTF-8 aus. Bei OpenOffice lässt sich das encoding der Datei beim Import angeben, bei Excel weiß ich es nicht.
* Du verwendest Windows-1252 (CP1252). Das sollte mit Excel zusammen auf jeden Fall funktionieren.
Ein weiterer "westlicher" Zeichensatz, der das Euro-Zeichen enthält, ist ISO-8859-15. Der ist aber, was die zusätlzichen Zeichen im Vergleich zu ISO-8859-1 angeht, nicht kompatibel mit Windows-1252. Bringt also wahrscheinlich nicht wirklich was in Bezug auf Excel.
Zur Umwandlung kannst Du dann natürlich nicht mehr utf8_decode()
nehmen, dazu gibt es aber auch noch [link:http://php.net/mb-convert-encoding@title=mb_convert_encoding()]
und [link:http://php.net/iconv@title=iconv()]
. Du musst ausprobieren, was auf dem von Dir verwendeten System verfügbar ist.
header('Content-type: application/csv;');
müsstest Du ändern zu
header('Content-type: application/csv; charset=utf-8');
oder
header('Content-type: application/csv; charset=CP1252');
(statt "CP1252" geht auch "Windows-1252")
Baba Daniel, in der Hoffnung nun noch Antwort zu erhalten :)
sischer datt ;)
Gruß,
David