[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