Da ich selbst immer wieder für mehrsprachige Websitesdarauf angewiesen bin, daß die Ausgabe in UTF-8 erfolgt, habe ich seit einiger Zeit einen gangbaren Weg gefunden, um unser aller Lieblings-CMS diesbezüglich zur Mitarbeit zu ermuntern. Es ist gar nicht so schwer.
1. Am besten bereits das Script zur Erstellung der MySQL-Tabellen auf UTF-8 trimmen.
MODx herunterladen und das Zip-Paket lokal entpacken. In der Datei install/setup.sql jeden "Create table"-Block, letzte Zeile, ändern. Z.B. von
) TYPE=MyISAM COMMENT='Contains data about active users.';
zu
) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci TYPE=MyISAM COMMENT='Contains data about active users.';
Dadurch werden die Datenbanktabellen gleich mit dem gewünschten Zeichensatz angelegt.
2. Dann ist leider etwas Corehacking nötig:
In zwei Dateien muß die interne Kommunikation zwischen PHP und MySQL auf UTF-8 getrimmt werden. Dazu zunächst in der Datei /manager/index.php den Datenbankverbindungsblock (in Version 0.9.2 und 0.95 ab Zeile 133)
// connect to the database
if(@!$modxDBConn = mysql_connect($database_server, $database_user, $database_password)) {
die("<h2>Failed to create the database connection!</h2>. Please run the MODx <a href='../install'>install utility</a>");
} else {
mysql_select_db($dbase);
}
ändern zu
// connect to the database
if(@!$modxDBConn = mysql_connect($database_server, $database_user, $database_password)) {
die("<h2>Failed to create the database connection!</h2>. Please run the MODx <a href='../install'>install utility</a>");
} else {
mysql_select_db($dbase);
mysql_query("SET NAMES 'utf8';",$modxDBConn);
mysql_query("SET CHARACTER SET 'utf8';",$modxDBConn);
mysql_query("SET SESSION collation_connection = 'utf8_general_ci';",$modxDBConn);
}
Und nun noch in der Datei manager/includes/extenders/dbapi.mysql.class.inc.php (in Version 0.9.2 und 0.95 ab Zeile 90) folgenden Block
if (!@ mysql_select_db($dbase)) {
$modx->messageQuit("Failed to select the database '" . $dbase . "'!");
exit;
}
ändern zu
if (!@ mysql_select_db($dbase)) {
$modx->messageQuit("Failed to select the database '" . $dbase . "'!");
exit;
}
mysql_query("SET NAMES 'utf8';", $this->conn);
mysql_query("SET character_set_results = 'utf8';", $this->conn);
mysql_query("SET collation_connection = 'utf8_general_ci';", $this->conn);
3. ModX per FTP uploaden, Installscript laufen lassen und anschließend einrichten
- Werkzeuge -> Konfiguration -> Tab "Seiten" -> Zeichenkodierung: "Unicode (UTF-8) - utf-8" einstellen
- Im eigenen Template dann natürlich die Metaangabe zum Zeichensatz nicht vergessen:
<meta http-equiv="Content-Type" content="text/html; charset=[(etomite_charset)]" />
oder direkt
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
4. Entity Encoding in TinyMCE auf "raw" setzen, damit die Sonderzeichen nicht mehr in die entsprechenden HTML-Entitäten umgeschrieben werden:
Ressourcen -> Ressourcenverwaltung -> Tab "Plugins" -> TinyMCE -> Tab "Konfiguration" -> Entity Encoding -> "raw"
Das war’s. Ab sofort rennt die Website ohne Kompromisse unter UTF-8. Kann leicht per PHPMyAdmin und einem Blick in die entsprechenden Tabellen überprüft werden. Alle Umlaute werden jetzt leserlich abgespeichert, und das gilt auch für nichtlateinische Zeichen. Letztere können auch in den diversen Feldern für die Dokumentmetaangaben benutzt werden, das ist wichtig gerade für mehrsprachige Webprojekte.
Viel Erfolg!