Tach!
Im Anschluss zeigten dann die aus der DB geladenen Inhalte auf der mit
<meta charset="UTF-8">
ausgezeichneten Seite den typischen Umlaute-Müll.
Damit Daten über die gesamte Kette der Systeme korrekt verarbeitet und dargestellt werden können, muss man zwei grundlegende Dinge beachten:
- Ein Empfänger muss wissen, in welcher Kodierung die Daten kommen.
- Ein System muss bei der Verarbeitung mit der Kodierung der Daten umgehen können, oder sie nur 1:1 durchreichen.
Mir scheint, dass bei dir der erste Punkt nicht klar ist. Du erwartest anders kodierte Daten als gesendet werden.
Zunächst dachte ich, das läge an den Inhalten der DB-Tabelle, da diese im Windows CP 1252 in die Tabelle importiert wurden. Als Hotfix für die Ausgabe war
utf8-encode()
*) erstmal wirksam.
Um zu schauen, ob die Inhalte korrekt gespeichert sind, helfen Tools, die beide genannte Punkte beachten. Du kannst nicht direkt das Speicherformat der Daten im DBMS kontrollieren. Wann immer du sie dir ansehen möchtest, braucht es ein Programm, dass die Daten abfragt und darstellt. Damit haben wir schon zwei Systeme in der Kette, das DBMS und das Anzeigeprogramm. Letzteres muss mit dem DBMS ausgehandelt haben, in welcher Kodierung die Daten zu senden sind. Das DBMS muss daraufhin die Daten liefern und sie gegebenenfalls umkodieren, wenn sie intern anders kodiert gespeichert sind.
Damit die Daten nun korrekt angezeigt werden können, ist es eine Voraussetzung, dass damals beim Eintragen ins DBMS ebenfalls die beiden Grundregeln beachtet wurden. Konkret heißt das, dass das Eingabeprogramm die Daten korrekt erfasst hat, und beim Senden an das DBMS mit diesem ausgehandelt hat, welche Kodierung zu verwenden sei. Auch hier wieder muss das DBMS umkodieren, wenn die Daten intern in einer anderen Kodierung gespeichert werden.
Was läuft da schief und wie behebe ich das?
Vermutlich hast du den ersten Punkt nicht beachtet, und nicht mit dem DBMS ausgehandelt, welche Kodierung beim Austausch der Daten zu verwenden sei. Das DBMS verwendet daraufhin einen Default-Wert, der wohl nicht zu deinen Erwartungen passt.
Ich habe in der DB eine neue Tabelle angelegt, die explizit UTF-8-codiert ist; auch die Kollation der Spalten wurde angepasst von latin1_german1_ci zu utf8_general_ci.
Du erwähnst nicht, welches DBMS zum Einsatz kommt. Aus den Kollationsnamen vermute ich, es ist MySQL/MariaDB. Wenn ja, dann siehe https://wiki.selfhtml.org/wiki/Zeichencodierung/MySQL.
dedlfix.