Im Grunde ist es eine alt bekannte Problematik, doch immer wieder sind TYPO3 Installationen anzutreffen, bei denen die Konfiguration der Datenbank und der Installation nicht UTF8 konform eingerichtet worden ist. So sind in der Vergangenheit viel Installtionen mit dem Zeichensatz latin1 vorgenommen worden. Spätestens bei einem Upgrade auf einer der aktuellen TYPO3 Versionen ab dem Release 4.6 fällt einem das Problem dann auf die Füße.
Was also tun, wenn nach einem geklückten TYPO3 Upgrade oder Update, die Sonderzeichen im Frontend bspw. in der Form ß (für das ß), ä (für das ä) oder ü (für das ü) dargestellt werden? Wer ein Update der Datenbank gemacht hat, kann sich etwas zurücklehnen und muss sich die Grundkonfiguration seiner Installation einmal genauer ansehen.
TYPO3 Konfiguration auf UTF8 anpassen
Abhängig von der TYPO3 Version auf die Ihr updatet, sind nämlich unterschiedliche Anpassungen zu machen, die vor einiger Zeit von jweiland bereits veröffentlich wurde und die ich hier, der Vollständigkeit halber, noch einmal anführen möchte:
- Im Install-Tool: Für den Parameter „systemLocale“ den Wert „de_DE.utf8“ definieren.
- Bis TYPO3 4.6 im Install-Tool: Für den Parameter „forceCharset“ den Wert „utf8“ definieren.
- Ab TYPO3 4.7 im Typoscript-Setup: Die Anweisung „config.renderCharset = utf-8″ zusätzlich ergänzen.
- Bis TYPO3 4.7 im Install-Tool: Für den Parameter „setDBinit“ den Wert „SET NAMES utf8;“ definieren.
- Den kompletten Cache leeren
Nachdem der Cache geleert worden ist, werden zwar nicht die Sonderzeichen richtig dargestellt, aber zumindest stellt ihr sicher, dass TYPO3 richtig konfiguriert ist.
Zeichensatz der Datenbanktabellen auf UTF8
Viel wichtiger, ist nun auch die Konfiguration der Tabellen anzupassen. In jedem Fall müsst ihr den Zeichensatz und die Kollation der einzelnen Tabellen auf UTF8 anpassen. Wenn ihr also in der jeweiligen TYPO3 Installation bisher den Zeichensatz latin1 verwendet habt, hätte – stark vereinfacht – das SQL CREATE-Statement für die TYPO3 Tabelle be_groups, wie folgt ausgesehen:
CREATE TABLE `be_groups` (
...
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Auf UTF8 gemünzt bedeutet das, dass das Statement so ausschauen sollte:
CREATE TABLE `be_groups` (
...
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
Wenn ihr also euer Datenbank Backup wieder einspielt, ist auf diese Anpassung zu achten, ansonsten werden die Informationen im falschen Zeichensatz persistiert.
Sonderzeichen in den Tabellen konvertieren
Nun sind die Datenbank und das TYPO3 System auf UTF8 formatiert. Was ist aber mit den falsch dargestellten latin1 Sonderzeichen? Hier gibt es nun zwei Wege, die mir bisher bekannt sind. Vielleicht kennt jemand einen weiteren?
Dump lokal konvertieren mit TextWrangler 3.5.3 (Mac)
Um einen SQL Dump von der Datenbank lokal auf einem Mac zu modifizieren, geht ihr wie folgt vor:
- Dump downloaden und mit dem Programm TextWrangler öffnen
- Im Menü wählen „Edit / Document Options wählen (oder File / Reopen Using Encoding)“.
- Im Popup wählen „Western (Windows Latin 1)“ und danach diese Version in unter einem neuem Dateinamen abspeichern
- Im Menü wählen „File / Reopen Using Encoding / Unicode (UTF-8)“ danach sollten die Umlaute korrekt angezeigt werden. Ggf. wird noch eine Fehlermeldung angezeigt, dass die Datei „damaged“ ist. Diese Meldung einfach ignorieren.
- Den Dump wieder per SSH einspielen mit bspw.:
mysql -u USER -p PASSWORD -h HOST --default-character-set=utf8 DB < dump-iconv.sql
Umlaute per SQL Statement modifizieren
In dieser Text-Datei befinden sich die SQL Update Statements für die deutschen Umlaute für die TYPO3-Tabellen, wie tt_content, tt_news, pages etc. befinden. Führt ihr diese Anweisungen in eurer phpMyAdmin SQL Konsole aus, sind die Umlaute richtig konvertiert. Wer französische Sonderzeichen verwendet, sollte diese natürlich in der Anweisung ergänzen.
Zu guter letzt: Wer hier Probleme hat und nicht weiter kommt, der kann sich gerne an uns wenden oder einen Kommentar hier veröffentlichen. Wir lassen keinen im Regen stehen. 😉