ich habe lange gesucht und bisher viele Problemschilderungen, aber keine Lösungen gefunden.
Ich bin mit meinem Board umgezogen bzw. die Grundlage wurde auf einen neuen Stand gebracht. mySQL-Version ist 5, PHP auch.
Vorher lief mein Board problemlos, nach der Umstellung wurden die deutschen Sonderzeichen (öäüß) verstümmelt ausgegeben bzw. ein Neu-Eintrag ab dem deutschen Sonderzeichen abgeschnitten.
Das Problem: mySQL und PHP "unterhalten" sich standardmäßig über UTF8. Die deutschen Daten liegen jedoch im latin1-Zeichensatz vor. Weder PHP noch mySQL wissen dieses und versuchen, die ankommenden oder ausgehenden Zeichen in die UTF8-Collation einzuordnen (über die Collation - Übersetzungstabelle). Dadurch werden die deutschen "Sonderzeichen" verstümmelt.
Mit meinem Provider habe ich folgende, eigentlich sehr einfache Lösung gefunden:
Wir können jedem Kontakt zwischen unserem PHP und der Datenbank eine "Sprach- bzw. Übersetzungsanweisung" mit auf den Weg geben. Die Anweisung gilt für jeden schreibenden und lesenden Vorgang auf die SQL-Datenbank.
Folgendermaßen:
mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET 'latin1'");
Als Code/Snipset würde ich dieses Anbieten (für die mysql4.php im Verzeichnis db, für die anderen Dateien bitte ich die Admins um Lösungswege):
Code: Alles auswählen
öffne /db/mysql4.php
finde if( $database != "")
DAVOR Einfügen:
// Set Charset for this Connection,
// Eingefügt für die UTF8-mySQL5-Datenbank zur korrekten Umsetzung der unterschiedlichen Zeichensätze PHP-MySQL.
// Zur Kodierung der Zeichen zwischen MySQL und PHP wird als Standard UTF8 verwendet.
// Sind ihre Daten in MySQL z.B. in latin1_german1_ci gespeichert werden diese vor der Auslieferung an
// PHP in UTF8 konvertiert. Dadurch werden die Zeichen an PHP und somit an den Browser im falschen Format ausgeliefert.
// Der Browser bekommt duch phpBB im Header die Information "charset=iso-8859-1" übergeben und kann daher mit UTF8 nicht viel anfangen.
// Das Ganze ist durch einen einfachen SQL Befehl einstellbar.
// PHP "spricht" latin1 und MySQL5 UTF8, jeder Verbindungsaufbau muss daher von PHP für die richtige Sprache initiiert werden.
// Dann kann mySQL die ankommenden Daten richtig umsetzen und PHP bekommt die Daten im richtigen Format ausgeliefert.
// Die mysql_query ist sozusagen als Übersetzer zwischen mySQL und PHP eingesetzt.
// Höhne / Networkaholics, Herr Theobald 2007-02-20
mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET 'latin1'");
// Ende Set Charset for this Connection,
Die Lösung werde ich auch noch als Vorschlag an die Snipset-Abteilung senden.
p.s.: Eine Alternative, das Template von phpBB anzupassen, damit der Browser es als UTF8 auswertet (im Header der HTML Seite steht momentan "charset=iso-8859-1"), hat nicht viel Erfolg gebracht (in der Datei "language/lang_german/lang_main.php" das Encoding auf UTF-8 umstellen). Die Ergebnisse der Datenbank werden dann zwar angezeigt, jedoch müssten alle "lang_"-Pakete auch auf UTF8-umgestellt werden, da deren Inhalte jetzt mit Fragezeichen statt deutschem Umlaut angezeigt werden.. Außerdem hat dies keine Auswirkungen auf die an die Datenbank gesendeten Dateien, die weiterhin verstümmelt werden.
Viel Spass und ich hoffe, einigen Leuten damit zu helfen.