UTF-8 / Latin1 (iso-8859-1)

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
an3k
Mitglied
Beiträge: 4
Registriert: 17.10.2007 13:48

UTF-8 / Latin1 (iso-8859-1)

Beitrag von an3k »

Hallo allerseits,

habe mir schon einige Threads diesbezüglich durchgelesen aber irgendwie klappt es nicht.

Ich habe von meinem alten MySQL-Server (welcher nicht mehr existiert) ein komplettes Backup mit phpmyadmin erstellt (.sql). In der .sql Datei war als default charset latin1 und als collate latin1_german1_ci angegeben.
Da bei phpmyadmin die Option "Senden" sowie Komprimierung angegeben war, ist die Datei als UTF-8 gespeichert worden (bug im phpmyadmin).

Nachdem ich dann das Backup auf meinen neuen SQL-Server eingespielt habe, hatte ich keine Umlaute auf der Webseite (in phpmyadmin wird alles korrekt dargestellt).

Habe bereits mit sämtlichen Einstellungen in phpmyadmin gespielt (Datenbank, einzelne Tabellen und auch jeweilige Reihen von latin1 auf utf8 und umgekehrt eingestellt) aber immer werden auf der Webseite die Sonderzeichen falsch dargestellt.

Habe dann meinen MySQL-Server per Konfigurationsdatei komplett auf UTF8 (utf8 sowie utf8_general_ci) eingestellt allerdings immer noch das selbe Problem.

Anschließend habe ich die Datenbank gelöscht und neu als utf8_general_ci erstellt und per Hand die sql Datei bearbeitet = sämtliche Einträge von latin1_german1_ci auf utf8_general_ci und latin1 auf utf8 geändert und die Datei mit Hilfe von TextPad auf UTF-8 umgestellt.

Die sql Datei selbst wird in UTF-8-fähigen Programmen korrekt angezeigt (Umlaute, etc.), auch das einspielen per phpmyadmin klappt problemlos sowie die Anzeige in phpmyadmin, allerdings wird immer noch die Webseite ohne korrekte Sonderzeichen dargestellt.

Noch zur Info: Da der Internet Explorer in jeder Version zu blöd ist anzuzeigen welchen Charset die Seite benutzt habe ich FireFox getestet und zumindest herausgefunden, dass die Kodierung der Webseite als UTF-8 angegeben ist, der Meta-Tag "Content-Type" allerdings das charset iso-8859-1 benutzt.

Um nun endlich zu meinen Fragen zu kommen ;)

a) Wo kann ich in phpBB2 einstellen welcher charset benutzt werden soll? Geht das überhaupt ohne manuelle bearbeitung der Dateien?

b) Wo kann ich in phpBB2 einstellen welcher charset zur Abfrage der Datenbank genutzt werden soll? Wie DSB in seinem sehr guten Thread schrieb, ist es möglich dass die komplette Datenbank in UTF-8 gespeichert ist, auf Anfragen vom Script aber in z.B. latin1 umwandelt sodass dieses die Inhalte korrekt anzeigt. Sollte es hier keine Option geben, in welche Datei muss ich welchen Code einfügen?
Jetzt kommen wir zum praktischen Teil:
Seit MySQL 4.0 benutzt MySQL intern zum Speichern von Daten utf8.
Das bedeutet aber nicht, dass Programmierer jetzt zwangsläufig alle Programme auch utf8-kodieren müssen, denn MySQL kann die Daten in jedem gewünschten Zeichensatz liefern. Wir müssen dem Server nur sagen, in welchem Format wir die Daten bekommen möchten und auch in welchem Format wir Daten liefern!

Dazu können Programme nach dem Verbindungsaufbau z.B. den Befehl "SET NAMES latin1" an den MySQL-Server senden.
Dadurch "einigen" sich das Programm und der MySQL-Server darauf, dass der Datenaustausch zwischen beiden über latin1-kodierte Daten geschieht. Werden Daten von einem Programm an den MySQL-Server gesendet, nimmt MySQL die latin1-Daten entgegen, wandelt sie intern in utf8 und speichert sie korrekt.
Fragt das Script Daten ab, dann liest MySQL die Daten aus und wandelt sie vor der Rückgabe an das Script wieder in latin1 um.
Die Kommunikation klappt also perfekt, wenn sich die beiden auf einen Zeichensatz einigen, da sie so wortwörtlich die gleiche Sprache sprechen.
Abschließend ein paar Informationen:
mysqld Ver 5.0.32-Debian_7etch1-log for pc-linux-gnu on i486 (Debian etch distribution)
PHP 5.2.4
phpBB2.0.22 (durch Updates)
Auf der Webseite werden Umlaute als ? angezeigt, d.h. ein latin1 Zeichen wird als UTF-8 interpretiert (ü = UTF-8 Zeichen als latin1 interpretiert).

Ich danke allen mit kontruktiven Vor- und Ratschlägen herzlichst im Voraus! Das Forum bestand sehr lange und dementsprechend kommt eine Neuinstallation nicht in Frage (sql. Datei ist rund 4MB groß!).
Benutzeravatar
Balint
Mitglied
Beiträge: 1815
Registriert: 25.01.2003 21:43
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von Balint »

Hallo!

vielleicht hilft die Lektüre auf der folgenden Seite und ein Import mit dem entsprechenden Tool. Manchmal ist phpMyAdmin doof:

http://www.mysqldumper.de/board/viewtopic.php?t=2313


Viele Grüße,
Bálint
Meine MODs für phpBB 2.x und phpBB 3.x!
an3k
Mitglied
Beiträge: 4
Registriert: 17.10.2007 13:48

Beitrag von an3k »

Ich habe den kompletten Thread auf der von dir gelinkten Seite bereits vor meinem Posting komplett gelesen und MySQLDumper kommt anscheinend nicht mit phpmyadmin erstellten Backups klar, zumindest erhalte ich extrem viele Fehler beim einspielen - ein mit MySQLDumper erstelltes "Backup" klappt, d.h. es liegt an der phpmyadmin-Struktur.

Das MSD Backup ist allerdings nicht ein Dump der alten, originalen Datenbank (diese existiert nicht mehr) sondern ein Backup von der durch phpmyadmin eingespielten Datenbank, d.h. liegt ein Fehler beim einspielen mit phpmyadmin vor wird dieser in das Backup von MSD mit übernommen...
an3k
Mitglied
Beiträge: 4
Registriert: 17.10.2007 13:48

Beitrag von an3k »

an3k hat geschrieben:...MySQLDumper kommt anscheinend nicht mit phpmyadmin erstellten Backups klar, zumindest erhalte ich extrem viele Fehler beim einspielen - ein mit MySQLDumper erstelltes "Backup" klappt, d.h. es liegt an der phpmyadmin-Struktur.
habe nun ein wenig getestet. Erstelle ich ein Backup mit der Perl-Funktion von MSD und versuche dieses anschließend wieder mit MSD einzuspielen erhalte ich den selben Fehler wie mit dem von phpmyadmin erstellten Backup.

Die PHP-Backup-Funktion von MSD erstellt alle Datensätze in eine Zeile, phpmyadmin und die Perl-Backup-Funktion von MSD erstellen pro Datensatz eine eingene Zeile, ansonsten gbit es keine wirklichen Unterschiede.
an3k
Mitglied
Beiträge: 4
Registriert: 17.10.2007 13:48

Beitrag von an3k »

Habe ein bisschen weiter getestet und einen Test-Post mit dem Inhalt "äöü" erstellt.

Auf der Webseite werden die drei Umlaute korrekt dargestellt. In der MySQL-Datenbank steht aber "äöü" anstelle von "äöü".

Wenn ich mich nun nicht total irre, bestätigt dies meine Vermutung, dass phpBB2 selbst iso-8859-1 nutzt, die Webseite allerdings als UTF-8 ausgeliefert wird.

Der User (Webbrowser) sieht alles in UTF-8 und gibt drei Umlaute (in UTF-8) ein welche natürlich korrekt angezeigt werden. phpBB denk die Eingabe ist iso-8859-1 (latin1), interpretiert dementsprechend die Umlaute als "äöü" und speichert diese so in der Datenbank. Die Datenbank speichert intern alles in UTF-8, weswegen nun in dieser im UTF-8 Zeichensatz die Zeichen "äöü" gespeichert sind.

Schreibe ich mir nun ein eigenes kleines PHP-Script was diesen Datensatz korrekt ausliest (alles in UTF-8) wird mir trotzdem "äöü" angezeigt und man könnte denken es wird irgendwo der falsche Datensatz genutzt, dem ist aber nicht so, denn utf8(äöü) ist latin1(äöü).

Ich muss also entweder phpBB dazu kriegen vollständig in UTF-8 zu denken, oder vollständig in latin1. Letzteres dürfte einfacher sein, da ich z.B. nicht die ganzen index.html Meta-Tags abändern muss.

Wie gesagt, die Webseite wird in UTF-8 dargestellt obwohl der Meta-Tag was anderes sagt.
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“