Konvertieren einer TYPO3-Installation zu UTF-8

Kürzlich bin ich mit unserem Intranet, das unter TYPO3 läuft, von einem Windows- auf einen Linux-Server umgezogen. Nun gab es einige Probleme mit dem Zeichensatz (Umlaute wurden nicht korrekt dargestellt etc.) und ich wollte die vorhandene Installation auf UTF-8 umstellen. Dazu habe ich bei typo3-media.com auch einen sehr guten Artikel gefunden.

Ich habe also u.a. zunächst einmal ein Dump der Datenbank gemacht, diese auf UTF-8 umgestellt und das Dump zurückgespielt. Aber leider standen die Umlaute etc. immer noch in „Reinform“ (ä, ö usw.) in der Datenbank, also nicht als seltsame Zeichenkombinationen. Nunja, dann habe ich einfach mal TYPO3 auf UTF-8 umgestellt: im Template metaCharset = UTF-8 und renderCharset = UTF-8 eingestellt und im Install-Tool [BE][forceCharset] = utf-8. Aber wie zu erwarten war, wurden die Umlaute als Fragezeichen ausgegeben…

Abhilfe schuf ein kleines Script, das sämtliche Datenbankinhalte in UTF-8 konvertiert, indem es diese ausliest und mit PHPs utf8_encode() konvertiert. Das Script habe ich auf dopefreshtight.de entdeckt: Von ISO-8859-1 zu UTF8.

Ich musste das Script aber ein klein wenig anpassen, da die recht umfangreichen Tabellen von TYPO3 zu Speicherproblemen führten. Zum einen bei sehr vielen Datensätzen in einzelnen Tabellen und zum anderen bei umfangreichen Inhalten in einzelnen Datenfeldern. Es gibt nun auch die Namen der Tabellen und die Anzahl der Datensätze aus. Wenn man es auf der Kommandozeile ausführt, kann man somit recht gut verfolgen, wie weit der Fortschritt ist…

Alle Schritte, die nötig waren um die Installation auf UTF-8 umzustellen, habe ich auch noch einmal in mein Wiki eingetragen.

Download des überarbeiteten Scripts

Überarbeitetes DB Convert für TYPO3

Über uns Stefan

Polyglot Clean Code Developer

12 Kommentare

  1. Hi!
    Ich habe das Problem mit den Umlauten nur im GIFBUILDER. Nach meinem Seitenumzug werden keine Umlaute mehr in Grafiken generiert. Meine ehemalige Datenbank lief unter der Kollation latin1_swedish_ci und meine neue unter UTF-8. Allerdings werden alle Texte einwandfrei wieder gegeben. Das Problem betrifft nur die Texte in den Grafiken.
    Ein Schriftarten-Problem konnte ich ausschließen – es geht auch mit der Standard-Schriftart nicht…
    Kannst du mir dazu etwas sagen?
    Gruß,
    Steffen

  2. Mhh… also den GIFBUILDER setze ich leider nicht ein 🙁
    Welche Version hast du denn? Vielleicht ist es ein TYPO3-internes Problem. Ich meine, TYPO3 ist noch nicht so lange vollständig UTF8-fähig, oder? Vielleicht hilft auch diese Extension: http://typo3.org/extensions/repository/view/convert2utf8/1.0.6/

  3. Danke für den Tipp. Leider hab ich keinen Unterschied durch die Extension gemerkt… Mich wundert es eben, dass es nur bei den Grafiken so ist. Ansonsten werden alle Umlaute einwandfrei dargestellt.
    Ich nutze Typo3 Version 4.1 und IM-Version 4.2.9.

  4. Also dann tippe ich mal auf ImageMagick. Das gibt’s ja schon länger in Version >6. Bei einer kurzen Suche konnte ich allerdings nichts zu UTF8-Problemen der Version 4 finden, aber vielleicht hast du da ja mehr Glück…

  5. Hm, ja. aber es ist ja Absicht, dass ich diese alte Version von IM benutze, da sie für Typo3 empfohlen wird. Außerdem habe ich diese Version auch auf dem alten System laufen gehabt und dort nie Probleme gehabt.
    Da ich immer noch keine Lösung gefunden habe, bin ich jedoch am überlegen, ob ich doch mal versuche, eine aktuelle Version von IM zu installieren. Hab allerdings ein wenig Angst, da auf dem Server einige Kunden-Seiten liegen. D.h. es darf nichts schief gehn! Werde eben doch noch weiter recherchieren müssen…

  6. Pingback:typo3.schloebe.de

  7. Hallo,

    super script – aber kann es sein das wenn man zuvor mit phpmyadmin die kollation auf utf8 geändert hat, sich bei den Umlauten Müll produziert hat, was dann dazu führt dass dann der DB-Inhalt nicht mehr mit konvertiert wird bzw. den Kruscht, den phpmyadmin produziert hat erneut umwandelt -> in noch größeren Kruscht?

    Anbei habe ich ein kleine T3-Tut basierend auf diesem script geschrieben und im typo3.net forum veröffentlicht. Hoffe das ist ok!

    Anbei der Link: http://www.typo3.net/forum/list/list_post//68944/

    Gruß
    InforMedic

  8. Klar ist das ok!

    Ich glaube den Fehler mit dem Umstellen der Collation habe ich beim Rumprobieren auch mal gemacht, bevor ich dann aufgegeben und das Script entwickelt habe 🙂

  9. Hi,

    ich habe die Umstellung per Script als Tutorial beschrieben: http://www.typo3erweiterungen.de/detail/article/39/typo3-auf-utf-8-umstellen/

    Zusätzlich habe ich deine Version etwas modifiziert. Bei deiner Version werden nämlich nicht alle Tabellenfelder umgewandelt. Deswegen diese Zeile:

    if(strpos($column['Type'], "char") != false || strpos($column['Type'], "text") != false)

    mit dieser ersetzen:

    if(strpos( ! $column['Type'], “char”) === false || ! strpos($column['Type'], “text”) === false)
  10. Hi Basti. Danke für den Tipp!

  11. Hallo,

    ich habe dein script noch leicht angepasst und bei einem unserer Projekte genutzt. Dabei haben sich einige Fragen aufgeworfen. Kann es sein das der Test auf UTF8 in is_utf8 nur bedingt nützlich ist?
    Ich habe das Gefühl das man dieses Script nur einsetzen kann wenn die gesamte Datenbank definitiv anders als utf8 codiert ist. Falls einige Daten bereits in utf8 sind, kommt es zu Fehlern.

    Ist das korrekt?

    Grüße Felix

  12. @Felix: Mh, das kann sein. Dazu kann ich ganz ehrlich gesagt nicht viel sagen…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax