Seite auswählen

Heute war es wieder so weit und ich durfte mich wieder einmal mit der Umlautproblematik in Zusammenhang mit WordPress herumschlagen. Was war es diesmal? Bei der Migration von WordPress nach WordPress MU (beide mit der gleichen Versionsnummer 2.84) tauchten plötzlich wieder erstaunliche Zeichenkombinationen statt der erwarteten Umlaute auf (und damit sind nicht die üblichen HTML-Entities gemeint):

Nach einiger Recherche fand ich mehrere Artikel zu dem Thema in Verbindung mit WordPress. Es scheint sowohl beim Update auf WP 2.2 als auf auf WP 2.71 häufiger Schwierigkeiten mit den Zeichenkodierungen zu geben (kann aber auch an einem Wechsel der MySQL Version liegen).

WordPress 2.2 verstümmelt Umlaute

Viele konnten das Problem auf einfache Weise lösen:

Doch die ebenso versierten wie fleißigen WordPresser im deutschen Forum wissen auch dafür eine simple Lösung: Einfach in der wp-config.php die ‘Zeilen’ (s.u.) leer lassen – und, lá voilá! Merci beaucoup!

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

Quelle vogelfrei

Doch das ist ein Workaround, der bei einem der nächsten Updates nutzlos werden könnte, da er nicht die wirkliche Ursache des Problem behebt. Erfreulicherweise hat Daniel Schlichtholz (Entwickler des MySQLDumper) über seinen informativen Artikel ‚Die Umlautproblematik – was, wieso, was tun?‚ hinaus zum Thema mittlerweile zwei weitere verfasst:

In dem ersteren fand ich einen Hinweis auf ein Tool mit dem sich bei bestimmten Voraussetzungen die MySQL Datenbank konvertieren lässt: DSB’s Umlaut Korrektur (DUK) (leider nur für Windows).

Zumindest in meinem Fall konnte ich damit die meisten ‚fehlerhaft‘ angezeigten Zeichen ersetzten. Nur die dänischen Anführungsstriche wurden nicht geändert und statt ‚»‘ & ‚«‘ war ‚„‘ & ‚“‘ zu sehen. Das konnte ich allerdings mit ein wenig SQL nach folgendem Muster lösen:

UPDATE tabellenname SET feldname = REPLACE(feldname, 'suchstring', 'ersatzstring');

So konnte ich die beiden Zeichenfolgen in den Beiträgen (Feldname post_content) einer WordPress Version 2.84 bei der die Tabelle für die Beiträge in der MySQL Datenbank den Namen ‚wp_posts‘ trägt (könnte je nach vergebenen Präfix anders lauten!) ersetzten:

UPDATE wp_posts SET post_content = REPLACE(post_content, '„', '»');
UPDATE wp_posts SET post_content = REPLACE(post_content, '“', '«');

Und das gleiche noch einmal für die Beitragstitel (Feldname ‚post_title‘):

UPDATE wp_posts SET post_title = REPLACE(post_title, '„', '»');
UPDATE wp_posts SET post_title = REPLACE(post_title, '“', '«');

Ich bin auf diese Weise hoffentlich zukunftssicherer als mit dem oben angesprochenen Workaround. Zumindest kann ich die beiden Anweisungen

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

so in der wp-config.php belassen wie sie sind 🙂 .

Alle genannten Vorgehensweisen ließen sich sowohl unter WordPress als auch unter WordPress MU (WPMU) durchführen.

PS: Es gibt wohl ein PHP-Skript von Frank Bültge, dass weitgehend automatisch für das Suchen und Ersetzen der Zeichenfolgen sorgt. Da dies Skript zu seinem Buch „WordPress. Weblogs einrichten und administrieren“ gehört, scheint allerdings jegliche Erläuterung zur Funktionsweise zu fehlen: convert_encoding_table.php.

Nachtrag: Als ich das wpSEO Plugin wieder aktivierte gab es erst einmal ein Problem. Obwohl ich nun den Blog auf UTF-8 (dachte ich zumindest) umgestellt hatte, tauchten genau die merkwürdigen Zeichenfolgen von denen ich annahm, dass ich sie gerade hinter mir gelassen hatte in der Ausgabe des title tag von wpSEO wieder auf. Umlaute wurden dort falsch dargestellt sobald ich wpSEO aktiverte. Ich habe daraufhin den Entwickler Sergej Müller angeschrieben und gefragt, ob er eine Idee zu dem Problem hätte. Er antwortete (wie immer unglaublich schnell), dass dies sehr wahrscheinlich kein Problem des wpSEO Plugins sei, da dies sich den erwarteten Zeichensatz aus den Einstellungen des jeweiligen WordPress Blogs holt. Er fragte nach, ob der Blog unter UTF-8 läuft. Das war dann auch des Rätsels Lösung. In den Einstellungen stand ‚utf8‘ und nicht ‚UTF-8‘. Nachdem ich das geändert hatte, wurden auch die Umlaute in den Titeln von wpSEO korrekt ausgegeben und die Anzeige der Umlaute in den Beiträgen blieb intakt. Herzlichen Dank an Sergej für die schnelle Hilfe.

Weitere Links: