Hallo Rolf,
der entscheidende Teil fehlt bei dir. Der ist offenbar das Einlesen der ANSI-codierten CSV-Datei. Ich habs jetzt mal minimal reduziert nachgebaut. Das Phänomen tritt sogar schon ohne weitere Behandlung der Daten auf. Es genügt eine einfache Ausgabe.
Je nach Button wird Fetch-Datei 1 oder 2 geladen. Einziger Unterschied ist die Ausgabe der CSV-Daten. Wenn ich das var_dump() des csv_array deaktiviere, werden im db_array die Umlaute angezeigt, mit var_dump() nicht. Hier noch der PHP-Teil dazu:
if($csv = fopen("csv_upload.csv", 'r')) {
$db_array = array();
$db_array[] = "Schuster";
$db_array[] = "Müller";
$csv_array = array();
while(!feof($csv)) {
array_push($csv_array, fgetcsv($csv, null, ","));
}
echo "<h1>db_array</h1>";
echo "<pre>";
var_dump($db_array);
echo "</pre>";
echo "<h1>csv_array</h1>";
echo "<pre>";
// bei Deaktivierung korrekte Umlaut-Darstellung im db_array
var_dump($csv_array);
echo "</pre>";
}
Es scheint ja serverseitig eine Umschaltung der Codierung stattzufinden, sobald er registriert, dass in dem Script an irgend einer Stelle Nicht-UTF-codierte Daten dargestellt werden sollen. Das Setzen dieses headers hat keine Veränderung gebracht:
header('Content-Type: text/html; charset=utf-8');
Hier hätte ich erwartet, dass zwar das csv_array ohne Umlaute dargestellt wird, dafür aber das db_array korrekt. Aber nee, keene Änderung. Hat noch jemand eine Idee oder eine andere Erklärung?
Schöne Grüße
Nico