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 />“;
}
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
Vielen Dank, edler Retter in der Not.
Servus
Masei1202
funktioniert nie, hat vielleicht ein mal zufllig bei dir funktioniert
Damit widersprichst du dir schon selbst, „egal“.
Und bei Typo3 funktioniert schon gar nichts „zufällig“. 😉
SUPER!!!
Hab mich schon stundenlang damit beschäftigt und jetzt endlich die Rettung!!!
Vielen Dank für den super Beitrag!!!
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
Vielen Dank für die zusätzliche Info bezüglich der Pipes!
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
Wo tauchen die Sonderzeichen auf? Im BE oder FE?
Sind die Sonderzeichen auch in der Datenbank gespeichert?
Super Beitrag!
Mit dem Skript unter 3. konnte ich meine Umlautprobleme mit GIFBUILDER lösen!
BE und FE wieder top. Danke!
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?
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
Tausend Dank für das Skript unter Punkt 3, hat mir gerade die Umlaute im GIFBUILDER geschenkt!
Nach vielen Stunden Arbeit beim Update und völlig zerschossenen T3 Web-Seiten fand ich HIER die Lösung.
Vielen herzlichen Dank!
Das war die Rettung, danke!
$TYPO3_CONF_VARS[‚SYS‘][’setDBinit‘] = ‚SET NAMES utf8; | SET CHARCTER SET utf8; | SET SESSION character_set_server=utf8‘;
Herzlichen Dank für die Lösung und die weiteren Hinweise!