Hallo Bernd, 

> bei leerem setDBinit geht TYPO3 wohl von latin1 aus und bearbeitet alles noch 
> einmal, obwohl es eigentlich richtig wäre.

Nicht TYPO3. In älteren PHP-Versionen ist die Datenbank-Verbindung per Default 
auf latin. MySQL erwartet dann latin-Daten. Um das zu verhindern muss man in 
php so vorgehen: 

    $db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
    $db_sel = mysql_select_db( MYSQL_DATENBANK ) or die("Auswahl der Datenbank 
fehlgeschlagen");
    $sql = "set names 'utf8';";
    mysql_query( $sql,$db_link );
    return $db_link;

damit wird die Verbindung für den aktuellen DB-Zeiger ($db_link) auf utf8 
umgestellt. Das tut innerhalb von TYPO3 die Einstellung setDBinit im 
Install-Tool. Wenn die fehlt, dann werden utf8-Daten über eine latin-Verbindung 
an die DB gesendet, die dann die utf8-Daten erneut nach utf8 kodiert. Beim 
Auslesen findet der umgekehrte Prozess statt. Tatsächlich gibt es nirgends 
wirklich latin-Daten; und es hängt nicht direkt mit TYPO3 zusammen sondern mit 
den PHP-Versionen und der Konfiguration der Datenbank-Verbindung. 

> wenn also daten in die DB geschrieben werden konvertiert TYPO3 deien UTF8 
> daten nach latin1,

Stimmt so m. W. nicht. in TYPO3 ist noch alles korrekt, nur die Verbindung zur 
DB ist latin. Die Daten werden völlig korrekt verarbeitet, aber MySQL erwartet 
aufgrund der DB-Verbindung latin und konvertiert selbst nach utf8. Da die Daten 
bereits utf8 sind, werden sie doppelt utf8 kodiert gespeichert. Der Übeltäter 
ist also eigentlich die Datenbank - und deshalb kann man es über Export in 
einen latin-Dump korrigieren. 

Wenn man PHP updatet (oder TYPO3) dann wird die DB-Verbindung plötzlich utf8 
und MySQL konvertiert beim Ausliefern der Daten nicht mehr zuerst nach latin 
(also nach einfach utf8) sondern sendet direkt doppelt-utf8 kodierte Daten. Das 
sind dann diese kryptischen Zeichen in Back- und Frontend. Zwei Lösungen: die 
Daten von doppelt utf8 zu einfach utf8 konvertieren, oder die DB-Verbindung 
über setDBinit auf latin setzen. 

In PHP würde das so aussehen: 

    $db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
    $db_sel = mysql_select_db( MYSQL_DATENBANK ) or die("Auswahl der Datenbank 
fehlgeschlagen");
    $sql = "set names 'latin';";
    mysql_query( $sql,$db_link );
    return $db_link;

So stelle ich z. B. sicher, dass in eine DB wirklich latin geschrieben wird (in 
ein paar Anwendungen brauche ich noch latin). Innerhalb von TYPO3 würde das die 
Einstellung setDBInit="set names latin" bewirken. 

> beim aufbau der Verbindung zur DB die Konvertierung aktivieren,

Das müsste dann allerdings "set names latin" lauten - das funktioniert in 
älteren TYPO3 Versionen, aber ich glaube nicht mehr in TYPO3 6.2. Bis TYPO3 4.5 
habe ich das bei etlichen Installationen so gehandhabt. Kleine Zeitbomben, weil 
mich das beim Update auf 6.2 natürlich in den Hintern beissen wird :-)

Das hier hilft vielleicht weiter: 
http://www.skom.de/Doppelt-UTF-8-kodierte-Daten-i.191.0.html

Gruß
Peter

--
Xing: http://www.xing.com/profile/Peter_Linzenkirchner
Web: http://www.typo3-lisardo.de
Facebook: http://tinyurl.com/lisardo-multimedia

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an