CMS Made Simple-Datenbank nachträglich auf UTF-8 umstellen
Wie im Beitrag CMS Made Simple in deutsch bereits beschrieben, können falsch zeichenkodierte Inhalte – besonders die Umlaute – Probleme bei der Darstellung im Frontend (von Besuchern sichtbarer Teil) oder beim Handling mit Erweiterungen von CMSms – den sogenannten Modulen – verursachen. Ob auch bei dir die Umlaute falsch in der Datenbank gespeichert sind, kannst du mittels eines Datenbankverwaltungsprogramms, wie phpMyAdmin, selbst überprüfen (z.B in der Tabelle [cms_]content_props).
Dieses How-to soll einen Weg aufzeigen, wie man die in der Datenbank falsch eingetragenen Umlaute und Sonderzeichen korrigiert werden können.
Hinweis:
Diese Korrektur kann zeitaufwendig sein und stellt einen ernsthaften Eingriff in die Datenbank von CMSms dar. Diese Umstellung sollte deshalb gut überlegt sein und nicht in Eile durchgeführt werden. Die Sicherung der Datenbank und veränderten Dateien (config.php, include.php) sollte selbstverständlich sein.
- Führe ALLE Schritte, die in dem Beitrag CMS Made Simple in deutsch beschrieben wurden, durch.
- Lösche den Zwischenspeicher von CMSms und aktiviere die Wartungsmeldung (Administrator->Globale Einstellungen)
- Wichtig: Sichere deine Datenbank mit z.B. phpMyAdmin und speichere sie an einem sicheren Ort!!! (Hilfe)
- Beim Suchen nach automatischen Lösungen bzw. Programmen habe ich einige Applikationen gefunden. Sie haben bei mir aber nicht funktioniert, so dass ich den manuellen Weg eingeschlagen habe.
- Erstelle eine Kopie deiner soeben gespeicherten Datenbank und arbeite NUR mit der Kopie!
- Lade die Datenbankkopie in einen UTF-8-fähigen Texteditor. Der Windows-Editor Notepad von 2000/XP/Vista unterstützt UTF-8, kommt aber mit den UNIX-typischen Zeilenumbrüchen nicht zurecht. Zudem muss die Kodierung beim Abspeichern manuell eingestellt werden. Als bessere Alternative für Windows kann ich das kostenlose Notepad++ empfehlen, Linux-Anwender sind mit Kwrite, Kate oder gedit gut bedient. Mac OS X User greifen z.B. zum mitgelieferten TextEdit oder Textwrangler.
- Suche und Ersetze die falschen Umlaute und Sonderzeichen. Verwende ggf. die Suchen-und-Ersetzen-Funktion deines Texteditors. Hier eine Tabelle mit den deutschen Umlauten und einigen wichtigen Sonderzeichen:
---------------------------------------------------------------- Suche | Ersetze mit -------+-------------------------------------------------------- ä | ä ö | ö ü | ü Ä | Ä Ã– | Ö Ãœ | Ü ÃŸ | ß > | > < | <  | ist eine Prefix. Das dahinter liegende Sonderzeichen | entspricht dem "richtigen" Zeichen. "Â" einfach | löschen ----------------------------------------------------------------
- Mehr Zeichen brauchte ich nicht konvertieren. Eine vollständige Tabelle für lateinische Schriften findest du auf http://forumtreff.pytalhost.de/viewtopic.php?p=147#p147. Auf der Seite http://forumtreff.pytalhost.de/66 findest du noch Tabellen für andere Schriften und Sprachen.
- Änderung des cms_module_templates-Blocks. Ersetze
CREATE TABLE IF NOT EXISTS `cms_module_templates` ( `module_name` varchar(200) collate utf8_unicode_ci default NULL, `template_name` varchar(200) collate utf8_unicode_ci default NULL,
durch
CREATE TABLE IF NOT EXISTS `cms_module_templates` ( `module_name` varchar(166) collate utf8_unicode_ci default NULL, `template_name` varchar(166) collate utf8_unicode_ci default NULL,
- Speichere die geänderte Datenbankdatei in eine neue UTF-8-kodierte Textdatei. In Notepad++ überprüfe die Kodierung im Menü “Format”. Notepad++ sollte aber die Ursprungskodierung richtig erkannt haben und die Kodierung sollte bereits auf UTF-8 stehen. Übrigens: Die Funktionen von Notepad++ “Konvertiere zu UTF-8” hätte zur Konvertierung unserer Datei nicht funktioniert, da unsere Datei ja bereits UTF-8-kodiert war, nur leider falsch.
- Starte phpMyAdmin und lösche die Tabellen der alten Datenbank
- Benutze den Link “Datenbanken” um die Datenbank zu wählen, deren Tabellen gelöscht werden sollen. Solltest du mehrere Datenbanken haben, vergewissere dich, dass du die richtige wählst!
- In der folgenden Oberfläche bekommst du alle Tabellen angezeigt. Unter der Tabellenliste klicke auf den Link “Alle auswählen” und dann rechts daneben auf das Auswahlfeld “markierte” . Wähle “löschen”.
- Im nachfolgenden Bestätigungsdialog klicke auf “OK”.
- Korrigierte Datenbankdatei wieder importieren (Hilfe).
- Wartungsmeldung auschalten (Administrator->Globale Einstellungen)
- Deine Site kontrollieren und ggf. noch einzelne Fehler über das Backend (CMSms-Administration) korrigieren. Ist aber wahrscheinlich in fast allen Fällen nicht mehr nötig.
Sollte deine Seite gar nicht mehr funktionieren, hast du wahrscheinlich irgendwo einen Fehler gemacht oder die Ausgangsvoraussetzungen waren nicht so, wie ich sie beschrieben habe. Gern gemachte Fehler sind: Zwischenspeicher nicht gelöscht, Änderungen in den Konfigurationsdateien vergessen oder geänderte Dateien nicht auf den Server zurückgespielt. Manchmal macht auch der Browser-Cache Probleme. Browser einfach neu starten. Für alle Fälle kannst du ja die Änderungen in der config.php und include.php zurücknehmen und deine Datenbanksicherung wieder einspielen.
Ich habe diese Methode mit einem Versuchssystem (mit Kate unter Linux) und mit einem “Produktivsystem” (mit Notepad++ unter Windows) erfolgreich durchgeführt.
Interessante Links
- Die Umlautproblematik – was, wieso, was tun? – Beitrag im Mysqldumper-Forum
- Probleme mit Zeichen-Kodierung – Beitrag im CMSms Forum
- Umlaute – Beitrag im CMSms Forum
- UTF-8 Konvertierungstabellen
Super-Anleitung! Vielen Dank. Es passiert immer wieder, dass bei der Erstellung der Datenbank, der Standardzeichensatz (schwedisch) vorangestellt ist. Ich habe es ein paar Mal vergessen und musste die Datenbank “reparieren”. Es geschah aber irgendwie immer chaotisch. Eine Schritt-für-Schritt-Anleitung wie diese lege ich in Favoriten ab 🙂