[TYPO3-german] TYPO3 und Charset-Chaos

Peter Linzenkirchner liste at lisardo.de
Fri May 14 20:22:41 CEST 2010


Hallo Raphael,

ich muss zugeben, dass ich das Problem auch nicht bis ins letzte  
verstanden habe. Ich wurstel mich aber ganz gut durch :-)

Am 14.05.2010 um 19:30 schrieb Raphael Weber:

>> In diesem Fall sollte das m.M.n. nicht nötig sein, da (s.o.) der  
>> Datenbankserver offensichtlich mit utf-8 arbeitet. Wenn ich  
>> 'forceCharset' und 'setDBinit' beiden keinen Wert zuweise,  
>> speichert TYPO3 die Sonderzeichen auch korrekt.

Korrekt? Was heisst das? Was ist dann in der Datenbank, utf-8 oder  
latin? latin wahrscheinlich, das wäre nämlich das normale.  
Typischerweise hat man nämlich folgende Konstellation:

TYPO3 arbeitet durch forceCharset in utf8.
Die DB-Verbindung ist aber latin.
Ergo werden die utf8-Zeichen als latin in der DB gespeichert.

Das war vor Version 4 von TYPO3 die Regel, da die älteren Versionen  
die Option set names nicht hatten.

Lies dir das hier durch:

http://www.gerd-riesselmann.de/softwareentwicklung/php-und-utf-8-eine-anleitung-teil-1-mysql

Mir gingen einige Kronleuchter auf - seit ich das gelesen habe, komme  
ich klar.



>>> Was mich jetzt allerdings brennend interessiert:
>>> a) wie werden die Eingaben aus dem Backend tatsächlich kodiert, wenn
>>> forceCharset auf utf-8 gesetzt ist und setDBinit keine Anweisung  
>>> enthält?

Sie werden als utf-8 kodiert, aber über eine latin-Verbindung an die  
DB gesendet. Dieses speichert die Zeichen dann eben nicht als utf-8  
sondern als latin - siehe in dem Artikel unter "Dröseln wir jetzt mal  
auf ...".

> Du meinst, in TYPO3 wäre standardmässig eine Übertragung in latin1  
> konfiguriert, auch wenn die Datenbank auf utf-8 eingestellt ist?

Nicht in TYPO3 - in PHP allgemein. Du musst bei jeder Datenbankabfrage  
eine utf-8-Datenbankverbindung  mit set names utf8 erzwingen, sonst  
speicherst du latin der DB.

Das Problem liegt m. E. darin, dass zwar TYPO3 bei dir bisher mit  
forceCharset auf utf8 stand, aber die Datenbankverbindung in latin  
blieb, also in der DB latin gespeichert wurde. Also hat TYPO3 für den  
Buchstaben ü zwar das utf-8 ü gesendet, aber über eine latin  
Verbindung, und die DB hat deshalb ü gespeichert. Wenn TYPO3 die  
Daten wieder abruft, erhält es latin ü, interpretiert das aber als  
utf-8 und zeigt ein ü. Wenn du allerdings jetzt mit set names = utf8  
die Datenbankverbindung umstellst, dann wird ü nach utf8 konvertiert  
und du bekommst ganz komisches Zeugs ... Es passt wieder, wenn du set  
names 'latin1' setzt.

>> man schön sehen, wenn man mit phpMyAdmin drauf geht und dort  
>> fehlerhafte
>> Zeichen sieht, während TYPO3 korrektes utf-8 ausliefert.
> Das ist tatsächlich der Fall.

Eben, siehe oben.

> Der Dump ist als utf-8-datei gespeichert. Die Datenbankverbindung  
> ist, wie gesagt, 100%ig utf-8.

Das heisst, wenn du die Datei im Texteditor öffnest und diesen  
anweist, dass er utf-8 zeigen soll, dann sind die Umlaute im Dump  
richtig? Nur wenn das der Fall ist, ist der Dump wirklich in utf-8.

Wenn er das ist, musst du nur noch die Daten korrekt als utf-8 in die  
DB reinbringen. Kontrolliere es über phpMyAdmin - wenn dort die  
Kollation der Verbindung auf utf-8 steht, musst du in phpMyAdmit die  
korrekten Zeichen sehen. Dann musst du nur noch die Einstellungen in  
TYPO3 setzen (forceCharset und set nemes utf8 und die Sache passt.

Gruß
Peter




More information about the TYPO3-german mailing list