• Autor: Franz Neumeier
  • Datum: 22. September 2010
  • Kategorie: PHP

Leidiges Problem bei Umlauten und UTF-8 gelöst

Seit Tagen hat mich eines dieser leidigen Umlaut-Probleme beschäftigt – jetzt habe ich endlich die Lösung gefunden, die ich gerne teile will mit allen, die ähnliche Schwierigkeiten haben. Aus SEO-Gründen generiere ich die description-Meta-Informationen in WordPress automatisch aus dem Excerpt der Postings – damit läßt sich der Text steuern, den Google in den Suchergebnissen unter dem Seiteltitel anzeigt.

Sobald jedoch WordPress mit UTF-8-Zeichensatzcodierung und sinnvollerweise auch die Datenbank unter UTF-8 läuft und im Excerpt ein Umlaut vorkommt, ging das schief – Google zeigte die typischen, schrägen Sonderzeichen an, die entstehen, wenn UTF-8 nicht richtig codiert ist. Nun müssen Sonderzeichen in den Meta-Informationen eigentlich gar nicht codiert sein, Google kommt wunderbar zurecht damit, wenn dort einfach ein ö, ä, ü oder ß steht. Unter Sicherheitsaspekten ist es aber nicht ratsam, Sonderzeichen uncodiert aus dem Posting-Text zu übernehmen. Also codiert das Skript bei mir mit der PHP-Funktion htmlentities() alle Sonderzeichen. Was ich (bzw. der Entwickler des Themes, in dem diese Funktion schon integriert ist) übersehen habe: htmlentities() codiert standardmäßig nicht in UTF-8, sondern in ISO-8859-1. Liefert also die WordPress-Datenbank UTF-8, dann führt htmlentities() automatisch zu dem beschriebenen Problem.

Erfreulicherweise ist die Lösung ganz einfach: htmlentities() verfügt nämlich über einen Parameter, mit dem sich die Codierung umstellen läßt. Das Ergebnis im Vergleich:

In der Default-Einstellung:

PHP-Code:

$content = htmlentities($content, ENT_COMPAT);

Das Ergebnis für die Zeichen ä ö ü in HTML:

ä ö ü

Und wie Google das – logischerweise – verarbeitet:

Und mit dem Character-Set-Parameter:

PHP-Code:

$charset = 'utf-8';
$content = htmlentities($content, ENT_COMPAT, $charset);

Das Ergebnis für die Zeichen ä ö ü in HTML:

ä ö ü

Und wie Google das verarbeitet:

Eigentlich ist die Lösung trivial und selbstverständlich, aber drauf kommen muss man halt, wenn man das Skript nicht selbst geschrieben hat, sondern sich auf Funktionen verläßt, die in einem fertigen Theme integriert sind.

Checkliste: Umlaut-Probleme

Hier nochmal eine allgemeine Checkliste, die man als erstes abarbeiten sollte, wenn man auf UTF-8- und Umlaut-Probleme stößt:

  • – Ist WordPress auf UTF-8 eingestellt? (Einstellungen – Lesen)
  • – Und steht das auch im Header des ausgelieferten HTML-Codes? (siehe Quellcode im Browser)
  • – Läuft wirklich auch die Datenbank wirklich unter UTF-8? (z.B. mit phpmyadmin)
  • – Liefert Apache tatsächlich UTF-8 aus? (Header prüfen, beispielsweise mit serverheader.com)
  • Comments: 3

Tags: , ,

3 Kommentare zu “Leidiges Problem bei Umlauten und UTF-8 gelöst”


  1. UTF8-Umstellung Webseite OK, google nicht - TYPO3 Forum & Portal
    on Sep 22nd, 2010
    @ 21:35

    […] […]


  2. Jens
    on Okt 17th, 2010
    @ 12:39

    also ich benutze auch UTF-8 und lasse auch meine jeweilige description aus dem excerpt ziehen, hatte bisher nie probleme mit den umlauten, ich benutze ein seo-plugin welches die entsprechende descriptions erstellt (vielleicht ist der entsprechende code schon darin enthalten)


  3. Mister Manny
    on Okt 24th, 2010
    @ 10:45

    wenn ich wordpress ganz standardmäßig installiere und laufen lasse gibt es bei mir auch keine probleme mit den umlauten, hab diese erfahrung nur mit statischen HTML-seiten gemacht die ich selbst mal erstellt habe, dieses problem kann man aber mit dem meta-tag language ausschalten

© 2024 Franz Neumeier's "Ceterum Censeo" Blog. Alle Rechte vorbehalten.

Powered by Wordpress and Magatheme by Bryan Helmig.