Drupal 7 ist großartig - keine Frage!
Leider mussten wir im Gegensatz zu Drupal 6 aber in einigen Projekten immer wieder Probleme in der Darstellung von "Layered Content", der Deutsche Sonderzeichen behinhaltet, feststellen. Besonders betroffen sind Panels und Admin Menu.
Dieser Beitrag erläutert die Lösung des Problems!
Das Titelbild sowie die angehängten Screenshots zeigen sowohl das Problem, als auch das Ergebnis nach einer recht einfachen Lösung.
Es wunderte mich sehr, dass dieses Problem nicht bereits häufig dokumentiert ist. Sowohl via Google Suche als auch auf Drupal.org konnte ich kaum Issues dazu finden. Für Admin Menu ist das Problem aber immerhin hier dokumentiert:
http://drupal.org/node/1092970
Die Lösung des Problems ist recht trivial und ich würde es dennoch als Fehler/Schwäche in Drupal 7 bzw. den zugehörigen Modulen betrachtet. So löst ihr die utf-8 Probleme:
1. Serverseitig Default Characterset auf UTF-8 setzen
Die Hauptursache für die dargestellten Probleme ist, dass der Server kein DefaultCharacterset setzt oder dieses vom benötigten UTF-8 abweicht.
Dies ist auch kein echter Fehler, sondern einfach eine Frage der Konfiguration. Andere auf dem Server laufende Software kann durchaus abweichende Anforderungen besitzen.
Für den Apache wird das Problem durch den folgenden Eintrag in die .htaccess (sofern Überschreiben aktiviert) oder die httpd-Settings gelöst:
.htaccess:
# >= Drupal 6.7
# Apache/PHP/Drupal settings:
## Add Default Character Set to prevent problems with js/css like in panels, admin_menu etc. => wrong encoding!
AddDefaultCharset UTF-8
Tipp: Wir hatten dieses Problem noch nicht, aber ggf. kann euch auch das PHP "default_charset" noch böse mitspielen.
In unserem Fall haben wir es auf "no value" belassen. Welchen Wert die Einstellung hat, könnt ihr in der php_info() nachsehen, die Drupal unter:
[URL]/admin/reports/status/php bereitstellt!
2. Korrektes Encoding Datenbankverbindung sicherstellen
Egal ob die oberhalb dargestellte Anpassung den Fehler bei euch behoben hat, empfiehlt es sich, auch das korrekte Encoding der Datenbankverbindung sicherzustellen.
Dies könnt ihr über zusätzliche Angaben zur Datenbankverbindung in der "settings.php" erledigen.
Ergänzt hier einfach die folgenden Zeilen:
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
?>
Die gesamte $databases Variable kann danach z. B. wie folgt aussehen:
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'db_example',
'username' => 'user_1',
'password' => 'password123',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
),
),
);
?>
Damit sollten alle Probleme aus dem Weg geräumt sein und die Darstellung von Sonderzeichen in jedem Fall korrekt sein.
Langfristig ist zu hoffen, dass Drupal dieses Problem intern im Code löst und nicht auf eine entsprechende Serverkonfiguration "hofft". Ich bin zuversichtlich =)
Gerne könnt ihr weitere Hinweise & Erfahrungen, beispielsweise zu relevanten META-Angaben als Kommentare ergänzen, auf die ich hier nicht weiter eingegangen bin.
Viel Erfolg mit der Lösung!
Sofern ihr weitere professionelle Unterstützung zu eurer Drupal Installation im Unternehmensumfeld benötigt, stehen wir von DROWL.de gerne zu eurer Verfügung. Unser Drupal CMS Hosting wird übrigens entsprechend vorkonfiguriert mit den DROWL.de Erweiterungspaket "Performance Basic" ausgeliefert, welches u. A. eine auf Drupal CMS optimierte Serverkonfiguration enthält.