[TYPO3-german] Falsche Umlaute in Datenbank und nach Update auf Webseite
Peter Linzenkirchner
liste at lisardo.de
Wed Feb 11 14:23:08 CET 2015
Hallo Lars,
wie ich dir schon geschrieben habe, du hast doppelt utf8-kodierte Daten in der Datenbank.
>
> Server characterset: latin1
> DB characterset: latin1
> Client characerset: latin1
> Conn. characterset: latin1
=> das ist der Übeltäter.
>
> Ok. Lasse ich mir also den Status der Tabelle anzeigen. Hier steht dann:
> tt_content utf8_general_ci
=> das ist belanglos, damit wird nur die Sortierung geregelt.
> Wenn ich mir dann mit SELECT bodytext FROM tt_content; den Inhalt in der
> Konsole anzeigen lasse, erhalte ich eine Ausgabe mit korrekter Darstellung
> der Sonderzeichen. Sogar die chinesischen Zeichen werden korrekt
> angezeigt.
Das liegt daran, dass deine Datenverbindung über das Terminal ebenfalls über Conn. characterset: latin1 funktioniert. Und damit MySQL dir die doppelt-utf8-kodierten Daten einmal nach latin konvertiert, womit utf8 bei dir ankommt. Also genau der gleiche Ablauf wie in TYPO3.
>
> Gehe ich nun mit pypMyAdmin auf diese Datenbank bekomme ich zunächst
> einmal angezeigt:
> Server-Zeichensatz: UTF-8 Unicode (utf8)
>
> Steht ja schon einmal im Gegensatz zu dem, was mir der Status in der
> Konsole sagt.
>
> Lasse ich mir dann die Daten von tt_content anzeigen, stehen auf dem
> Bildschirm komische Sonderzeichen statt der Umlaute:
> "... GmbH übernimmt ..."
phpMyadmin setzt die Connection auf utf8 - macht also das gleiche wie setDBiniti = utf8 in TYPO3. Damit erhältst du doppelt utf8 kodierte Daten. Die sehen ganz genau so aus, wie dein Beispiel oben. Also genau das, was TYPO3 in Version 6.2 draus macht.
>
> TYPO3 ist wie folgt konfiguriert:
>
> [SYS][UTF8filesystem] = 1
> [BE][forceCharset] = utf-8
> [SYS][setDBinit] =
=> das ist der Übeltäter, damit steht die Connection auf latin.
> Im TypoScript ist KEIN Charset definiert, in der HTML-Ausgabe steht aber:
> < meta http-equiv="Content-Type" content="text/html; charset=utf-8" / >
da muss nichts stehen, [BE][forceCharset] = utf-8 regelt das alles. Damit wird utf8 im HTML und im Backend erzwungen. Wenn gleichzeitig setDBinit nicht gesetzt wird - oder die Datanbank-Verbindung nicht anderweitig auf utf8 gesetzt wird - ist das Ergebnis doppelt utf8 in der DB.
> In dieser Konstellation zeigt TYPO3 4.5.39 die Seite mit allen
> Sonderzeichen (deutsch/chinesisch) korrekt an. Nach einem Update auf
> TYPO3 6.2.9 sind alle Sonderzeichen "kaputt".
Jepp. Weil TYPO3 in Version 6.2 setDBinit automatisch auf utf8 setzt. Und damit eine uft8-Verbindung erzwingt, was bedeutet, dass die Daten auf dem Weg von der DB zu TYPO3 nicht nach latin kodiert werden. Und damit kommen bei dir doppelt utf8 kodierte Daten an. Ganz im Gegensatz zu TYPO3 4.5 ohne setDBinit: hier steht die Verbindung auf latin, und damit konvertiert MySQL die Daten _bevor_ es sie an TYPO3 schickt einmal nach latin. Doppelt utf8 wird so zu einfach utf8 und die Umlaute stimmen.
>
> Ich frage mich nun, wo erst einmal der grundlegende Fehler zu suchen ist?
> Sind die Daten schon in der Datenbank falsch gespeichert?
JA. Sie sind doppelt utf-8 kodiert. Und TYPO3 6.2 schaltet ausschließlich die Datenverbindung um. Und damit sendet MySQL andere Daten.
> Aber warum
> kann ich sie mir dann in der Konsole korrekt anzeigen lassen?
Weil einzig und allein die Verbindung zur DB eine Rolle spielt. Und die ist die gleiche wie in TYPO3 4.5 - aber nicht wie in TYPo3 6.2, weil dort setDBinit die Verbindung umsetzt.
> Und
> warum kann 4.5 sie korrekt zeigen, 6.2 aber nicht?
Unterschiedliche setDBinit-Einstellungen und damit unterschiedliche Datenverbindungen.
Abhilfe:
http://www.skom.de/Doppelt-UTF-8-kodierte-Daten-i.191.0.html
Fall 6 ist dein Fall.
Gruß
Peter
--
Xing: http://www.xing.com/profile/Peter_Linzenkirchner
Web: http://www.typo3-lisardo.de
Facebook: http://tinyurl.com/lisardo-multimedia
More information about the TYPO3-german
mailing list