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


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

Antwort per Email an