Hallo Nico,
Sobald ich die CSV-Daten ohne utf8-encode() im Array_2 speichere, werden in var_dump(Array_1) die Umlaute falsch dargestellt, mit utf8-encode() erscheinen sie korrekt.
Das ist wirklich verrückt. Hier spielen weitere Effekte mit, die Du vermutlich für irrelevant hältst, die aber dennoch Einfluss haben.
Abfrage DB-Daten => Speicherung in Array_1 (Umlaute korrekt)
Einlesen CSV-Daten => Speicherung in Array_2 (Umlaute korrekt)
Quervergleich zwischen DB-Daten und CSV-Daten (Umlaute in Array_1 fehlerhaft)
Nein, das KANN nicht sein. Dass sie Daten in Array_1 durch einen Vergleich mittels similar_text verändert werden, schließe ich aus. Da passiert noch irgendwas anderes. Ich kann nicht beurteilen, ob deine Vorstellung von "korrekt" der Realität entspricht
Ich habe ein Testprogramm geschrieben:
<pre><?php
$utfmuell = "Müller";
$ansimuell = utf8_decode($utfmuell);
echo strlen($utfmuell) . " - " . bin2hex($utfmuell) . "\n";
echo strlen($ansimuell) . " - " . bin2hex($ansimuell) . "\n";
$db = [ "name" => $utfmuell ];
$csv = [ "name" => $ansimuell ];
var_dump($db);
var_dump($csv);
echo "Ähnlichkeit: " . similar_text($db['name'], $csv['name']);
var_dump($db);
var_dump($csv);
Die Codierung des PHP-Quellcodes ist UTF-8, deshalb erhalte ich mit utf8_decode($utfmuell) die ANSI-Version. Wenn man es genau nimmt, verwende ich hier eine missbilligte Funktion, utf8_decode verwendet ISO-8859-1 als Zeichensatz, der obsolet ist und durch ISO-8859-15 ersetzt wurde. Die Unterschiede sind aber marginal, und für mein Testprogramm liefern utf8_decode und iconv("UTF-8", "ISO-8859-15", $utfmuell) das gleiche.
Wenn ich das laufen lasse, erhalte ich:
Warning: Your output contains characters that could not be displayed.
7 - 4dc3bc6c6c6572
6 - 4dfc6c6c6572
array(1) {
["name"]=>
string(7) "Müller"
}
array(1) {
["name"]=>
string(6) "Mller"
}
Ähnlichkeit: 5
array(1) {
["name"]=>
string(7) "Müller"
}
array(1) {
["name"]=>
string(6) "Mller"
}
Die ANSI-ü erzeugen die Warnung, dass ungültige Zeichen in der Ausgabe wären, darum steht da Mller für die ANSI-Ausgaben. Dort, wo Müller in der Ausgabe steht, war ein UTF-8 String.
Also - da ändert sich nichts. Nicht in der Minimalversion.
Rolf
sumpsi - posui - obstruxi