![]() | ||||||||||||||||||||||||||||||||||
Navigation • Home
| Umlaute falsch dargestellt in der Bildergalerie
Du legst eine Kategorie „Thüringer Wald“ an, und auf der Startseite der Galerie steht „Thüringer Wald“. Oder ein eigener Begrüßungstext in der Vorlage zeigt plötzlich eine Raute mit Fragezeichen, wo das „ü“ hingehört. Werden Umlaute falsch dargestellt, ist fast nie der Text selbst schuld. Irgendwo auf dem Weg vom Speichern bis zum Bildschirm hat ein Programm die Bytes nach einer anderen Tabelle gelesen, als sie geschrieben wurden. Das Gute daran: Jedes Fehlerbild hat seine eigene Handschrift, und die verrät dir, wo du suchen musst.
Umlaute falsch dargestellt: das Fehlerbild verrät die StelleEin Umlaut ist für den Computer eine Folge von Bytes. Im heute üblichen UTF-8 besteht das „ü“ aus zwei Bytes, hexadezimal
Die erste Zeile ist mit Abstand der häufigste Fall, und sie hat eine Faustregel: Steht ein „Ó vor einem zweiten seltsamen Zeichen, war der Text richtig als UTF-8 gespeichert und wurde nur falsch gelesen. Das „ä“ wird so zu „ä“, das „ö“ zu „ö“, das „ß“ zu „ß“. Die Bytes sind intakt, es fehlt nur die richtige Brille. Bei der Raute mit Fragezeichen ist es umgekehrt: Der Browser erwartet UTF-8, bekommt aber ein Byte, das dort nicht vorkommen darf, und setzt ein Ersatzzeichen. Beim schlichten Fragezeichen ist der Buchstabe tatsächlich weg, keine Einstellung holt ihn zurück. Die vier Übergänge, an denen ein Zeichen kipptEin Kategoriename legt einen weiten Weg zurück. Du tippst ihn in ein Formular, der Browser schickt ihn an PHP, PHP reicht ihn über die Datenbankverbindung an MySQL, MySQL legt ihn in einer Tabelle ab. Beim Anzeigen läuft alles rückwärts, und am Ende steht der Text in einer HTML-Seite, die der Browser auslegt. An jedem Übergang gilt eine eigene Angabe zum Zeichensatz:
Die Grafik legt die Fehlerbilder aus der Tabelle oben auf diese Kette. Hervorgehoben wird jeweils ein Übergang, daneben steht, wie „Thüringer“ aussieht, wenn genau dort etwas nicht passt, und ob das Bildergalerie-Script den Übergang selbst regelt. Die Kette erklärt auch, warum nach einem Umzug zu einem neuen Hoster plötzlich Umlaute falsch dargestellt werden, obwohl niemand etwas geändert hat. Setzt ein Script den Zeichensatz der Verbindung nicht ausdrücklich, galt beim alten Hoster vielleicht zufällig die passende Voreinstellung, beim neuen nicht mehr. Von außen nach innen prüfenSind auf deiner Seite Umlaute falsch dargestellt, stell nicht alle Stellen auf Verdacht um, sondern geh vom Browser zur Datenbank. So weißt du nach wenigen Minuten, ob die Daten heil sind und nur die Anzeige hakt, oder ob der Schaden schon gespeichert ist.
Der dritte Schritt ist der wichtigste, denn er trennt zwei Fälle mit ganz verschiedener Lösung. Heile Daten brauchen nur eine korrigierte Einstellung. Gespeicherte Fehler bleiben, auch wenn danach alle Einstellungen stimmen, und müssen einzeln repariert werden. Wenn der Fehler schon in der Tabelle stehtBei drei oder vier betroffenen Kategorien ist Handarbeit der sicherste Weg: Namen in der Verwaltung öffnen, richtig eintippen, speichern. Sind es Hunderte Bildbeschreibungen mit „ü“, lohnt ein SQL-Befehl, der die falsch gelesenen Zeichen wieder in ihre Bytes zurückverwandelt und diese als UTF-8 neu liest. Teste ihn vorher immer mit einem SELECT, etwa Die Auswahl dieser Zeilen braucht eine Sortierung, die Zeichen genau vergleicht. Die übliche behandelt „Ó und „A“ als gleich, eine Bedingung wie Texte, die eine alte Galerie sauber im Zeichensatz ISO-8859-1 gespeichert hat, sind übrigens kein Schaden im Sinne dieses Abschnitts. Das Bildergalerie-Script erkennt solche Texte bei der Ausgabe und wandelt sie selbst in UTF-8 um. So vermeidest du den Fehler künftigIst die Kette einmal durchgehend auf UTF-8, bleibt sie es in der Regel, solange niemand eine Datei im falschen Format speichert. Die Rückfälle, die Betreiber erleben, haben fast immer einen dieser Auslöser:
Werden später doch wieder Umlaute falsch dargestellt, hilft die Handschrift aus der Tabelle oben weiter: Ein „Ó führt zur Verbindung, eine Raute zur Datei, ein Fragezeichen zur Neueingabe. Was das Bildergalerie-Script selbst regeltVon den vier Übergängen nimmt dir das Bildergalerie-Script seit Version 3.15 zwei vollständig ab und entschärft einen dritten. Die Datenbankverbindung läuft immer mit Fehlerbilder und Meldungen, die es nur im Script gibtNeben den allgemeinen Fehlerbildern kennt die Galerie ein paar eigene. Sie haben mit ihrer Versionsgeschichte und mit den Dateien zu tun, die du selbst bearbeitest:
Die erste Zeile ist ein Fehlerbild, das in der Tabelle weiter oben fehlt, weil es nur in alten Versionen vorkam: Der Text verschwand ganz, statt verstümmelt zu erscheinen. Seit 3.15 maskiert die Galerie jede Ausgabe ausdrücklich als UTF-8 und wandelt ältere ISO-8859-1-Texte vorher um, statt sie zu verwerfen. Dateinamen ohne Umlaute sind AbsichtEin Fall sieht so aus, als würden Umlaute falsch dargestellt, und ist doch keiner: die Dateinamen. Beim Hochladen und beim FTP-Import schreibt die Galerie Umlaute im Namen aus und setzt alles klein. Aus „Kürbisse vor der Scheune.jpg“ wird Auf dem Server muss außerdem die PHP-Erweiterung mbstring aktiv sein. Sie verarbeitet die Texte mit Umlauten. Fehlt sie, zeigt die Galerie keine falschen Zeichen, sondern bricht mit einem Fehler ab. Bei den meisten Webhostern ist sie eingeschaltet, sonst findest du sie im Kundenmenü bei den PHP-Einstellungen. Wenn du das an einer eigenen Galerie nachvollziehen willst, kannst du das Bildergalerie-Script kostenlos herunterladen und mit einem Testbild namens „Größe über alles.jpg“ ausprobieren. Häufige FragenWelche Frage zuerst kommt, hängt meist davon ab, ob nur einzelne Texte oder ganze Seiten betroffen sind. Mit welcher Codezeile stelle ich die Datenbankverbindung auf den richtigen Zeichensatz?Bei mysqli lautet sie Warum werden nur in Bildtiteln aus der Datenbank Umlaute falsch dargestellt, im restlichen Text aber nicht?Dann ist die Vorlage richtig gespeichert, und der Fehler sitzt auf dem Weg zwischen Datenbank und Seite. Prüfe in phpMyAdmin, wie der Titel in der Tabelle steht. Ist er dort korrekt, liegt es an der Verbindung, die ohne ausdrücklichen Zeichensatz arbeitet. Steht dort schon „ü“, wurde der Titel einmal falsch gespeichert und muss repariert werden. Wie korrigiere ich bereits falsch gespeicherte latin1-Daten in größerer Menge?Mit einer Umwandlung, die die falschen Zeichen in Bytes zurückverwandelt und neu als UTF-8 liest, wie im Abschnitt über gespeicherte Fehler beschrieben. Probiere sie zuerst mit SELECT an 20 Zeilen aus, exportiere dann die Datenbank und wende sie nur auf Zeilen an, die wirklich ein „Ó enthalten. Auf korrekte Texte angewendet verdirbt dieselbe Umwandlung sie. Muss ich die Tabellen meiner älteren Galerie auf utf8mb4 umstellen?Nein. Die Galerie arbeitet seit 3.15 mit latin1- und mit utf8mb4-Tabellen, Umlaute erscheinen in beiden Fällen richtig. Lohnend ist die Umstellung nur, wenn du Emojis in Beschreibungen speichern willst. Dann sicherst du zuerst die Datenbank, etwa per Export in phpMyAdmin, und stellst die fünf Tabellen admin, admin_log, bilder, kategorie und einstellung mit ALTER TABLE … CONVERT TO CHARACTER SET utf8mb4 um. Meldet MySQL bei der Tabelle bilder den Fehler 1071, muss der Schlüssel auf dateiname auf 190 Zeichen gekürzt werden. Verwandte ThemenZeichensatz, Datenbank und Verbindung hängen eng zusammen. Diese Beiträge erklären die einzelnen Stellen der Kette genauer. | |||||||||||||||||||||||||||||||||