Typo3: Umlaute falsch dargestellt

Nach dem letzten Update von typo3 (4.4 –> 4.5) waren überall die Umlaute nur noch als kryptische Sonderzeichen vorhanden. Hier beschreibe ich kurz, wie in den einzelnen Bereichen/Funktionen die Umlaute (bei mir) wieder hergestellt wurden.

1. Backend

Unter >Erweiterungen (extension) >Übersetzungen (translations) als Sprache >german auswählen und die Auswahl speichern.

Nun in den User Settings statt der Backend-Sprache „english“ eben „german“ auswählen. Den cache löschen und die Seite aktualisieren. Nun sollte das Backend wieder wie gewohnt die Umlaute darstellen (ggf. noch einmal ab- und wieder anmelden).

2. Frontend

Wenn im Frontend in den einzelnen Inhalten und Überschriften ebenfalls Sonderzeichen statt Umlaute enthalten sind, helfen folgende Schritte:

Im Backend anmelden und >Installation aufrufen. Ggf. muss im Verzeichnis …/typo3conf eine Datei mit dem Namen ENABLE_INSTALL_TOOL liegen. Im Installations-Tool nun auf „All Configuration“ klicken und bei folgenden Einträgen, diese Werte setzen:

[multiplyDBfieldSize] = 1
[setDBinit] = SET NAMES utf8;
                       SET CHARCTER SET utf8;
                       SET SESSION character_set_server=utf8;
[UTF8filesystem] = 1 (anklicken)
[forceCharset] = utf-8

Nicht vergessen, abschließend ganz unten am Ende der Liste „Write to localconf.php“ zu klicken, damit die Einstellungen auch in die Datei localconf.php geschrieben und übernommen werden. Danach wie immer: alle cache leeren und Seite aktualisieren. Die Sonderzeichen im Frontend sollten nun wieder verschwunden sein.

3. Gifbuilder

Ich verwende ImageMagick (IM) um im grafischen Menü (gmenu) aus den textlichen Seitenüberschriften Bilder rendern zu lassen. Obwohl im Frontend und Backend nun alle Umlaute korrekt dargestellt werden, sind in den gerenderten Bildern immer noch Sonderzeichen zu sehen (eine Variante ist, dass gar keine Umlaute/Sonderzeichen zu sehen sind).

Hier hilft folgendes: Erstelle zunächst eine Datei „user_convchar.php“ in …/fileadmin/ mit folgendem Inhalt:

<?php
class user_convchar {
   function encode ($content,$conf) {
      $convmap = array (0x80, 0xff, 0, 0xff);
      return mb_encode_numericentity($content, $convmap, „utf-8“);
   }
}
?>

Gehe nun wieder in’s Backend und rufe das Template der root-Seite auf. Unter der Auswahl „Info/Bearbeiten“ auf „Setup“ klicken. In dem vorliegenden Typoscript nun als erste Zeile folgendes einfügen:

includeLibs.convchar_script = fileadmin/user_convchar.php

Nun den Bereich suchen, wo die grafischen Menüs erzeugt werden (der Block startet z. B. mit Trailer.file = GIFBUILDER). Unterhalb der Zeile „10.text.field = subtitle“ (kann auch 20. … oder „title“ sein) die folgende Zeile einfügen:

10.text.postUserFunc = user_convchar->encode

Ggf. 10. mit der entsprechenden Nummerierung ersetzen, oder bei Mehr-Ebenen-Menüs den Eintrag an der nächsten Ebene noch einmal wiederholen.

Alles Speichern und  cache löschen.

4. Mysql

Ich verwende selbst geschriebene php-Skripte, die Informationen in eine MySQL-DB speichern – oder auslesen. Auch hier werden mitunter Umlaute als Sonderzeichen ausgegeben. Die o. g. Einstellungen greifen nur innerhalb Typo3, aber nicht wenn z. B. über eine php-extension eigene Skripte ausgeführt werden.

Abhilfe schafft ein zusätzlicher Eintrag mit der Sprach-Vorgabe im Umfeld der DB-Konnektierung am Skriptanfang. Zum Beispiel bei einer lokalen Installation:

$dbhandle = mysql_connect(„localhost“,“root“);
mysql_set_charset(‚utf-8‘,$dbhandle);

Speichern, cache löschen und im aktualisierten Frontend prüfen, ob alles stimmt.

Das sollte es jetzt.

[Zusatz, 30.12.2011]

Außerordentlich hilfreich war auch ein kleines Skript von Boris Bojic, das sich den Inhalt einer Datenbank vornimmt und alle Sonderzeichen in gängige deutsche Umlaute konvertiert (siehe folgend). Ich stelle das Skript hier gerne zur Verfügung:

<?php
/**
 * Alle kaputten Umlaute reparieren bei Umstellung von ISO->UTF8
 *
 * @project        –
 * @author        Boris Bojic <bojic@devshack.biz>
 * @copyright     Copyright (c) 2011, Boris Bojic (DevShack)
 * @version       Fri, 23 Dec 2011 13:47:11 +0100
 * @updated        –
 *
 */
// === [ Content / Charset ] ==============================================
header(‚Content-Type: text/html; charset=utf-8‘);
 
// PHP auch explizit auf UTF-8 setzen
mb_internal_encoding(‚UTF-8‘);
 
$db = array();
 
$db[‚host‘]        = „localhost“;
$db[‚uname‘]    = „mysql_user“;
$db[‚password‘]    = „mysql_pass“;
$db[‚database‘]    = „datenbankname“;
     
$dbconnect = mysql_connect($db[‚host‘], $db[‚uname‘], $db[‚password‘]) or die („Konnte keine Verbindung zur Datenbank aufnehmen!“);
mysql_select_db($db[‚database‘],$dbconnect) or die („Fehler beim Auswählen der Datenbank!“);
mysql_set_charset(‚utf8‘);
 
echo ‚<pre>‘;
 
function getTables($db){
     $result = mysql_query(„SHOW TABLES FROM “ . $db[‚database‘]);
     while($row = mysql_fetch_row($result)){
        $res[] = $row[0];
    }
     return $res;
 }
 
function getColumns($table){
    $table = mysql_real_escape_string($table);
    $mysqlres = mysql_query(„SHOW COLUMNS FROM “ . $table);
    while($row = mysql_fetch_row($mysqlres)){
        $res[] = $row[0];
    }
    return $res;
}
// Alle Tabellen ermitteln
$tablesArray = getTables($db);
     
// Alle Spalten pro Tabelle ermitteln und durcharbeiten
foreach($tablesArray AS $table){
    $affectedRows = 0;
    $spalten = getColumns($table);
     echo „Tabelle: “ . $table . „<br />“;
 
    foreach($spalten AS $spalte){
  
        echo „…Spalte: “ . $spalte . „<br />“;
 
        $query = ‚
            UPDATE `‘ . $table . ‚` SET
              `‘ . $spalte . ‚` = REPLACE(`‘ . $spalte . ‚`,“ß“, „ß“),
              `‘ . $spalte . ‚` = REPLACE(`‘ . $spalte . ‚`, „ä“, „ä“),
              `‘ . $spalte . ‚` = REPLACE(`‘ . $spalte . ‚`, „ü“, „ü“),
              `‘ . $spalte . ‚` = REPLACE(`‘ . $spalte . ‚`, „ö“, „ö“),
              `‘ . $spalte . ‚` = REPLACE(`‘ . $spalte . ‚`, „Ä“, „Ä“),
              `‘ . $spalte . ‚` = REPLACE(`‘ . $spalte . ‚`, „Ãœ“, „Ü“),
              `‘ . $spalte . ‚` = REPLACE(`‘ . $spalte . ‚`, „Ö“, „Ö“),
              `‘ . $spalte . ‚` = REPLACE(`‘ . $spalte . ‚`, „€“, „€“)
        ‚;
        mysql_query($query) OR die(mysql_error() . $query);
        $affectedRows += mysql_affected_rows();
     }
 echo „Tabelle “ . $table . “ aktualisiert, Datensätze: “ . $affectedRows . „<br /><br />“;
} 

17 Einträge zu “Typo3: Umlaute falsch dargestellt

  1. Klasse Beitrag, hatte das Gleiche Problem nach dem Update und dieses nach der Anleitung erfolgreich gelöst!

    Geben hier folgende Bewertung ab:

    Facebook= gefällt mir ?

    Google= google +1 ?

    MfG

    Sven

  2. Hallo! Danke für diese super Lösung.

    Ich habe eine weile gesucht.. und war knapp drann.. und jetzt hatz geklappt. DANKE! 🙂

    [setDBinit] = SET NAMES utf8; | SET CHARCTER SET utf8; | SET SESSION character_set_server=utf8;

    Die Pipes hat es bei mir noch gebraucht.

    Typo3 4.6.3

  3. Hi

    leider klappt dies bei mir nicht. Nach Ausführung von Punkt 1 und 2 sind weiterhin die Sonderzeichen zu sehen.

    Die TYPO3-Version ist 4.5.7.

    Kann jemand helfen, hat jemand noch einen Tipp?

    webmaster at tatort minus fundus punkt de

  4. Hat bei mir funktioniert, aber mit einer kleinen Irritation:

    Wenn ich die Seiten jetzt aufrufe, werden sie mit *zwei* Content-Type Meta Tags ausgeliefert. Erst (vor dem generator Tag) eins mit „text/html; charset=utf-8“ und dann (nach dem generator Tag) eins mit „text/html; charset=iso-8859-1“. Offenbar sucht sich der Browser das richtige aus, aber unwohl ist mir trotzdem dabei.

    Irgendjemand eine Idee, wo das herkommen könnte?

  5. Hallo! Danke für die Lösungen.

    bei [setDBinit] = … musste ich allerdings alles mit Pipes machen, erst dann hatte sfunktioniert.

    SET NAMES utf8; | SET CHARCTER SET utf8; | SET SESSION character_set_server=utf8

  6. Das war die Rettung, danke!

    $TYPO3_CONF_VARS[‚SYS‘][’setDBinit‘] = ‚SET NAMES utf8; | SET CHARCTER SET utf8; | SET SESSION character_set_server=utf8‘;

Antwort an egal Abbrechen

Die E-Mail Adresse wird nicht veröffentlicht. Required fields are marked *