Antwort an „Rolf B“ verfassen

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
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen