Top

Kodierung für Umlaute und Sonderzeichen nach WordPress 2.6 Update defekt! Was tun?

Juli 18, 2008 by Markus 

Kodierungsfehler wegen wp-config.php
Kürzlich habe ich Blogupdates auf WordPress 2.6 durchgeführt. Zuvor wurden die Dateien und die Datenbank natürlich gesichert. Nun musste ich aber feststellen, dass ein Blog auf einmal eine merkwürdige Zeichenkodierung aufwies.

Umlaute und Sonderzeichen wurden auf ein mal nicht mehr korrekt dargestellt, wie dieses Bild hier zeigt.

Umlaute wp-config falsch dargstellt

Ich habe aber genau die gleichen Files, z.B. auch für Blogmillionaer.de genutzt, und der Effekt ist hier nicht aufgetreten. Also hab ich mich auf die Suche nach der Ursache des Problems gemacht. Die größte Befürchtung war natürlich, dass es beim Update der Datenbank, zu einem Fehler gekommen ist. Glücklicherweise war dies nicht der Fall.

Haben andere auch das Problem?

Klar, wenn sowas passiert, sollte man erst mal kurz eine Suchmaschine bemühen, um zu sehen, ob auch andere das gleiche Problem haben und ob es schon Lösungsansätze gibt. Recht schnell, bin ich auf einen Artikel bei tiliaone.de (the Listx blog) gestoßen.

Dort gab es wohl das gleiche Problem. Der erste Lösungsvorschlag:

Die deutsche Version des Suchen und Ersetzen Plugins um jeden Umlaut manuell, für alle Beiträge, zu ersetzen.

Zwar eine Möglichkeit, aber da ich ein fauler Blogger bin ;) und nicht jeden Umlaut und jedes Sonderzeichen, wie z.B. das recht häufig verwendete “Anführungszeichen” einzeln ersetzen wollte, habe ich mich auf die Suche nach der eigentlichen Ursache des Problems gemacht.

WordPress Kodierung – Was soll das ganze?

Erst mal muss man wissen, dass die Kodierung bei WordPress erst seit Version 2.2 definiert wird. So kann jeder Blogger in der Sprache seiner Wahl schreiben. Für einen großen Teil, sollte allerdings die utf8 Kodierung die richtige Wahl sein, und sollte auch nicht geändert werden.

wp-config.php – Wer aktualisiert, wird bestraft

Jedes WordPress WordPress Update, bei dem das komplette Archiv der neuen Version auf den Server gezogen wird, überschreibt jede Datei…

Außer eine: wp-config.php

Denn diese enthält wichtige Informationen wie Benutzername und Passwort der Datenbank. Dafür wird die Datei wp-config-sample.php hochgeladen. Im Laufe der Monate und Jahre haben sich aber wichtige Änderungen in dieser Datei ergeben, auf die ich teilweise noch in einem späteren Blogpost bezüglich WordPress Sicherheit eingehe.

Unter anderem wurden auch die Zeilen

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

hinzugefügt.

Diese zwei Einträge waren vor der Version 2.2 noch nicht vorhanden und sollten auch nicht bei einem Update der config.php hinzugefügt werden!

Schließlich bin ich auch noch auf einen offiziellen WordPress Hinweis aufmerksam geworden

Warning for those performing upgrades: If DB_CHARSET and DB_COLLATE do not exist in your wp-config.php file, DO NOT add either definition to your wp-config.php file unless you read and understand Converting Database Character Sets. Adding DB_CHARSET and DB_COLLATE to the wp-config.php file, for an existing blog, can cause problems — as Ryan Boren says, “your queries will go boom!”

Frei übersetzt:

Warnung an diejenigen, die Upgrades durchführen: Wenn DB_CHARSET und DB_COLLATE nicht in deiner wp-config.php Datei existieren, füge diese Definitionen NICHT zu deiner wp-config.php Datei hinzu, außer du liest und verstehst “Converting Database Character Sets”. Das Hinzufügen von DB_CHARSET und DB_COLLATE bei einem bereits bestehenden Blog in der wp-config.php kann Probleme verursachen, wie Ryan Boren sagt: “Eure (Datenbank)Abfragen werden explodieren”

Quelle

Die Lösung

Die Lösung in den meisten Fällen ist also ganz einfach:

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

aus der config.php entfernen! Wenn Du Dir unsicher bist, kannst Du die Einträge auch auskommentieren, indem Du /* vor und */ nach den beiden Zeilen setzt. Würde dann wie folgt aussehen.

/*define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');*/

Dies dürfte in den meisten Fällen genügen und kann auch bei Bedarf leicht rückgängig gemacht werden.

Generell gilt: Wer nicht noch zusätzlich an der WordPress-Datenbank schrauben will, sollte die beiden Zeilen nur in wp-config.php belassen bzw. hinzufügen, wenn die Version der ersten WordPress Installation mindestens 2.2 war!

Ein Hinweis in der wp-config-sample.php wäre hilfreich gewesen

wp-config-php

Sonst sparen die WordPress-Entwickler doch auch nicht mit Kommentaren.

Vielleicht wäre es für die Zukunft hilfreich, neben DB_CHARSET und DB_COLLATE noch kurz einen Hinweis zu setzen. Hätte mir und bestimmt auch anderen Bloggern einige Arbeit und Nerven erspart.

Änliche Beiträge:
WordPress 2.6.2 rausgeschossen – Was steckt drin und für wen ist das Update Pflicht?
Wieder neue WordPress 2.6 Keys! Wie alt ist Deine wp-config.php Datei?
Lokale Testumgebung für WordPress einrichten
Änderungen in der wp-config.php! Hast Du den SECRET KEY schon eingetragen?
WordPress Crash! Sowas kann passieren. Besser absichern!

Kommentare

  • danke danke danke. Habe nach langer Zeit direkt auf 2.8 geupdatet und war kurz davor, alle Sonderzeichen in den Tabellen zu ersetzen..
  • re_phil
    Das geht in der neuen Version aber nicht mehr, oder?

    Bei uns sehen die Umlaute total seltsam im IExplorer aus:

    http://www.konisto.de/anleitung_abnehmen-beim-tampolin-springen-6677.html
  • Tom
    Danke, fuer den Tipp.
  • Sven
    Aaaah, danke danke danke. Habe nach langer Zeit direkt auf 2.8 geupdatet und war kurz davor, alle Sonderzeichen in den Tabellen zu ersetzen.. Hat mir viel Nerven und Zeit gespart :)
  • und ich Depp hab alle Tabellen zu UTF8 gewandelt, weil die teilweise noch in ISO-8859-1 waren.
    Ganz mühsam mit
    SELECT table_name, table_collation FROM tables WHERE table_collation 'utf8_general_ci' and table_schema = '...' and table_collation 'utf8_bin'
    Dann alle mit bspw.
    alter table gschmarri_posts CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    umgeschubst.
    Das alles für 8 Websites. Das wäre echt einfacher gegangen. Danke für den Tip!
  • Danke für die Tipps zum Auskommentieren, bei mir (nutze WP 2.61) bleiben die Umlaute trotzdem chaotisch - außer auf der Startseite. Könnte es vielleicht am Plugin Superchache oder Simple Tags liegen? Bin echt ratlos... :-((
  • Na Super, bei mir ist alles durcheinander. Danke für die Hinweise!
  • DaRkGirL
    Hallo,
    ich hab ein riesen problem, auf meine seite steht
    Parse error: syntax error, unexpected T_STRING in /home/cybers/public_html/datas/config.php on line 6


    mein code ist

    <?php
    define( "DATABASE_SERVER", "xxx" );
    define( "DATABASE_USERNAME", "xxx" );
    define( "DATABASE_PASSWORD", "xxx" );
    define( "DATABASE_NAME", "xxx" );
    $mysql = mysql_connect(dbserver, dbusername, dbpw)or die(mysql_error()) ;
    $mysql_select_db( dbname );
    $username = mysql_real_escape_string($_POST["username"]);

    .........


    Könnt ihr mir bitte helfennn ... :'(((
  • Denis
    Ich hab das ganze mal nachgestellt. Hat funktioniert und irgendwie nach paar Minuten ging schon nix mehr, bzw die Umlaute waren wieder verschwunden..
    Ne Idee?
  • Hallo,
    du hast mir viel Zeit gespart. (Googlesuche auf Platz 1)
    bin bem Update von 2.3.2 nach 2.6.2 in die Falle getappt.
    jetzt brauche nur noch ein neues Thema

    Danke
    Stefan
  • Daniel
    Daaaaaankeeee! Ich war schon so verzweifelt und befürchtete jeden einzelnen Blogposts unseres Business Blogs einzeln nach Sonderzeichen und Umlauten zu durchsuchen. Deine Seite ist sofort in die Lesezeichen gewandert!
  • Herzlichen Dank,
    nach dem Upgrade auf die 2.6.1 gabs erst mal eine Schrecksekunde.
    Das Auskommentieren hat übrigens auch nach dem Upgrade noch geholfen - anschließend waren die Umlaute ok.

    Merci und Gruß
    alex
  • Ergänzung: Es sind zwei ' ' und nicht ein " !!!!!!!!!!!!!!!!!!!!!!!!
    Dann sollte es gehen ;-)
  • Was steht denn in Zeile 7 ??
    define('DB_COLLATE', ''); sieht bei mir genau so aus.
    Können es "falsche" Gänsefüßchensein??
    Ist was im WP-Forum zu finden?? Etwa hier: bei google-Suche auf Platz 13 ->
    nach "Parse error: syntax error, unexpected T_STRING"
  • Wer kann mir helfen? Bekomme diese Fehlermeldung:
    Parse error: syntax error, unexpected T_STRING in /homepages/0/d105338280/htdocs/wordpress-2.6-de_DE/wordpress/wp-config.php on line 7

    Habe
    define('DB_CHARSET', 'utf8');
    define('DB_COLLATE', '');
    schon entfernt, hat aber nichts genützt

    Möchte Wordpress neu installieren.

    Gruß
  • Nervig, was die da immer ändern und nicht ausreichend dokumentieren. Naja, dank Abwarten mit dem Update und deines Artikels habe ich nun die Lösung.
  • Hallo,

    sehr schöner Artikel. Wird sicherlich vielen da draußen helfen. Hoffentlich habe ich nicht auch diese Probleme, wenn ich meine Wordpress Version aktualisiere.
  • Ganz ohne ist also so ein Update nicht immer. Wenn man eine Sicherungsdatei hat, ist es ja nicht weiter schlimm. Diese sollt man jedenfalls anlegen.
    Bei größeren Versionssprüngen kann eine Neuinstallation sinnvoller sein. Und natürlich sollte man sich sicher sein, was man macht ;-)
blog comments powered by Disqus
Bottom