Umlaute falsch dargestellt in der Bildergalerie

 

Werden Umlaute falsch dargestellt, zeigt deine Galerie seltsame Zeichen wie Fragezeichen oder kryptische Buchstabenfolgen, wo eigentlich ein Umlaut stehen sollte. Dahinter steckt fast nie ein Tippfehler, sondern ein Zeichensatz-Problem. Verschiedene Teile deiner Webseite sprechen unterschiedliche Sprachen, wenn es um die Kodierung geht. Bringt man sie auf einen gemeinsamen Stand, verschwindet der Fehler.

Umlaute in der Bildergalerie werden falsch dargestellt: Code-Datei, Datenbank und Browser sind mit Haekchen ausgerichtet, waehrend ein zerfallendes fe

Warum Umlaute falsch dargestellt werden

Ein Computer speichert Buchstaben als Zahlen. Welche Zahl zu welchem Zeichen gehört, legt der Zeichensatz fest. Verbreitet sind heute UTF-8 und das ältere latin1. Speichert ein Teil deiner Seite einen Umlaut nach UTF-8, ein anderer Teil liest ihn aber als latin1, entsteht Buchstabensalat. Der Umlaut ist nicht verloren, er wird nur falsch übersetzt. Das passiert immer an den Übergängen zwischen Datei, Datenbank und Browser.

Umlaute falsch dargestellt: drei Stellen prüfen

Damit Umlaute korrekt erscheinen, muss an drei Stellen derselbe Zeichensatz gelten. Die Tabelle zeigt, welche das sind und wie sich ein Fehler dort bemerkbar macht.

StelleAuswirkung bei Fehler
Kodierung der DateiFeste Texte zeigen falsche Zeichen
Verbindung zur DatenbankGespeicherte Titel werden verfälscht
Angabe im HTML-KopfBrowser liest die Seite falsch

Sind feste Texte aus dem Quelltext betroffen, liegt es an der Speicherform der Datei selbst. Erscheinen dagegen nur die Kategorienamen oder Bildtitel falsch, die aus der Datenbank kommen, stimmt die Kodierung der Datenbankverbindung nicht. Zeigt der Browser alles falsch, obwohl die Daten richtig gespeichert sind, fehlt oder stimmt die Angabe im HTML-Kopf nicht.

So bringst du alles in Einklang

Prüfe die drei Stellen der Reihe nach und sorge dafür, dass überall derselbe Zeichensatz gilt. UTF-8 ist heute die empfohlene Wahl.

  1. Speichere deine PHP-Dateien im Editor ausdrücklich als UTF-8 ohne BOM.
  2. Setze die Verbindung zur Datenbank nach dem Verbinden auf utf8mb4.
  3. Prüfe, dass im HTML-Kopf die Angabe charset=utf-8 steht.
  4. Lade eine Seite mit Umlauten neu und kontrolliere das Ergebnis.

Der häufigste Stolperstein ist die Datenbankverbindung. Selbst wenn die Datenbank intern auf UTF-8 steht, muss das Script nach dem Verbinden den Zeichensatz der Verbindung ausdrücklich festlegen. Fehlt dieser Schritt, werden korrekt gespeicherte Umlaute beim Auslesen falsch übersetzt, obwohl alles richtig aussieht.

Was bei bereits falschen Daten gilt

Sind Titel oder Kategorien schon mit kaputten Zeichen gespeichert, reicht die Umstellung der Verbindung allein nicht, da der Schaden bereits in der Datenbank steckt. In diesem Fall korrigierst du die betroffenen Einträge am besten von Hand im Verwaltungsbereich, nachdem die Kodierung überall stimmt. Lege vorher eine Sicherung der Datenbank an, falls eine größere Korrektur nötig wird. Achte künftig darauf, neue Inhalte erst einzupflegen, wenn alle drei Stellen auf demselben Zeichensatz stehen.

Umlaute falsch dargestellt künftig vermeiden

Hast du die drei Stellen einmal in Einklang gebracht, bleibt es meist ruhig, solange du an der Kodierung nichts mehr änderst. Ein paar Gewohnheiten halten Umlaute dauerhaft sauber. Diese Punkte beugen einem Rückfall vor.

  • Stelle deinen Editor fest auf UTF-8 ohne BOM ein, damit neue Dateien gleich stimmen.
  • Prüfe nach einem Serverwechsel, ob die Datenbankverbindung weiterhin den Zeichensatz setzt.
  • Kontrolliere bei neuen Vorlagen die Angabe im HTML-Kopf, bevor du sie einsetzt.

So bleibt der einmal erreichte Zustand erhalten, und du musst die Suche nach der Ursache nicht bei jedem neuen Inhalt wiederholen. Tauchen die seltsamen Zeichen später doch wieder auf, weißt du nun, an welchen drei Stellen du zuerst nachsiehst, und behebst den Fehler in wenigen Minuten.

Häufige Fragen

Rund um den Zeichensatz tauchen typische Fragen auf, je nachdem, ob nur einzelne Texte oder die ganze Seite betroffen sind.

Mit welcher Codezeile stelle ich die Datenbankverbindung auf den richtigen Zeichensatz?

Setze direkt nach dem Verbinden mysqli_set_charset($db, 'utf8mb4'); im Script. Im HTML-Kopf gehört zusätzlich <meta charset="utf-8"> in den Bereich head, damit der Browser die Seite richtig liest.

Warum erscheinen nur die Bildtitel aus der Datenbank falsch, der restliche Text aber korrekt?

Dann stimmt die Kodierung der Datenbankverbindung nicht, während die feste Datei korrekt als UTF-8 gespeichert ist. Das behebt mysqli_set_charset($db, 'utf8mb4'); nach dem Verbindungsaufbau. Sind dagegen feste Texte aus dem Quelltext betroffen, speichere die PHP-Datei im Editor als UTF-8 ohne BOM.

Wie korrigiere ich bereits falsch gespeicherte latin1-Daten in größerer Menge?

Statt jeden Titel von Hand zu ändern, lässt sich die betroffene Spalte mit einem gezielten SQL-Befehl umkodieren, der den Inhalt von latin1 nach utf8mb4 konvertiert. Lege vorher unbedingt eine Sicherung der Tabelle an, da eine falsche Umwandlung die Texte zerstören kann.

Verwandte Themen

Da das Problem fast immer an der Datenbankverbindung hängt, führen diese Themen tiefer in Zeichensatz und Datenbank.