We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 36451
    • 264 Posts
    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!
      • 21800
      • 174 Posts
      smiley Danke für diese Anleitung. doch bevor ich beginne ... kann ich eine bestehende Installation auch auf diese Weise anpassen?
        • 17883
        • 1,039 Posts
        thx yoomai!

        Allerdings ist mir nicht ganz klar, wozu das nötig ist? Ich habe ca. 15 ModX-Seiten aufgesetzt, alle als UTF-8 und hatte nie Probleme. Kommt allerdings teilweise auf den Provider an. Bei einigen unglücklichen MySQL-Versionen war die Kollation der SQL-Verbindung nicht ganz richtig, aber bei den neueren sollte das eigentlich auch gehen. Das einzige Problem war die Suche, das sich mit der Tiny-Einstellung "raw" aber auch erledigt hat.
          • 36451
          • 264 Posts
          Quote from: MadeMyDay at Feb 08, 2007, 03:08 AM

          Bei einigen unglücklichen MySQL-Versionen war die Kollation der SQL-Verbindung nicht ganz richtig, aber bei den neueren sollte das eigentlich auch gehen.

          Nun, ich habe hier die vollständige Abhandlung der Thematik vermerkt, die wirklich alle Unsicherheiten ausschließt. Wenn es mit der vorhandenen MySQL-Kollation klappt, kann man sich das vielleicht sparen.

          Quote from: MadeMyDay at Feb 08, 2007, 03:08 AM

          Das einzige Problem war die Suche, das sich mit der Tiny-Einstellung "raw" aber auch erledigt hat.

          Das gilt für den Contentbereich. Für die Metaangaben wie "Title", "Summary" etc. schafft es MODx m.E. ohne die Corefummelei noch immer nicht, Zeichen außerhalb Standard ASCII ordentlich in der Datenbank abzulegen. Schnapp Dir einfach mal ein paar bulgarische oder griechische Begriffe aus der Wikipedia und setze sie in ein solches Feld ein. Dann sieh Dir im PhpMyAdmin an, was daraus geworden ist.

          Allerdings stammen meine Erfahrungen diesbezüglich noch aus 0.9.2.x Zeiten. Sollte das sich in 0.95 gebessert haben, kann man sich vielleicht wirklich einigen Aufwand sparen. Da lerne ich gern dazu smiley

          @nos
          Überprüf doch mal, welcher Zeichensatz mit welcher Kollation in der Datenbank eingestellt ist (per PhpMyAdmin). Du kannst das jederzeit per Hand umstellen. Allerdings kann es Dir dann passieren, dass die Entitäten auch erst wieder in "Klarbuchstaben" umgewandelt werden müssen. Ich empfehle dazu ein Dump der Datenbanktabellen (innerhalb MODx unter "Backup") und das Suchen/Ersetzen mit einem UTF-8-fähigen Texteditor. Danach die Sicherung einfach wieder zurückspielen.
            • 21800
            • 174 Posts
            @yoomai
            Ist es eine gute Idee, eine modX-Installation mit den o. g. Änderungen "upzudaten"? Dann die Seiten (Inhalte) neu (mit tinyMCE in raw) neu zu speichern?
            Habe ungefähr 50 sql-Tabellen. Habe mir auch den DB-Dump angesehen, weis aber nicht so recht was ich da ersetzen soll, da ich da keinen "content" finde. (du siehst, ich hab wenig Ahnung von DBs aber keine scheu vor Manipulationen, die mir halbwegs plausibel erscheinen).
            Als Alternative sehe ich (neben einen kompletten Neuanfang) nur, mich mittels phpInfo durch die komplette Datenbank zu quälen. Aus irgendeinem Grund hat die Installation alles Tabellen auf "latin1_swedish_ci" gestellt.
              • 36451
              • 264 Posts
              Ich geh mal davon aus, daß Du mindestens eine MySQL ab 4.1 am Laufen hast, denn darunter macht es ohnehin keinen Sinn mit UTF-8. Wenn Du von 50 Tabellen sprichst, dann gehe ich davon aus, daß Du noch die alte MODx 0.9.2 fährst, richtig? Zeit für ein Update wink


              • Dump machen (hast Du ja schon)
              • Im PHPMyAdmin an jede Tabelle gehen und auf utf-8 stellen.
              • Die oben beschriebenen Ergänzungen die beiden Dateien einarbeiten (also /manager/index.php und manager/includes/extenders/dbapi.mysql.class.inc.php)
              • Dump-Datei in den Text-Editor laden und per "Suchen&Ersetzen" die Entities in Umlaute wandeln (z.B. &Uuml; nach Ü usw., einfach alles ersetzen --> Groß- und Kleinschreibung BEACHTEN!)
              • Dump per PhpMyAdmin zurücksichern
              • ModX auf utf-8 einstellen (siehe oben)
              • Tiny auf raw einstellen
              • fertig. Freuen.

              Keine Gewähr grin
                • 9805
                • 8 Posts
                Hi, erlaubst du die Veröffentlichung des Tutorials auf der ModX Wiki ? Wenn ja übertrage ich es dorthin.

                Grüße Flece
                  • 36451
                  • 264 Posts
                  Nur zu.
                    • 9805
                    • 8 Posts
                    ein wenig anders formatiert: http://wiki.modxcms.com/index.php/De:MODx_f%C3%BCr_den_Betrieb_unter_UTF-8_einrichten
                      • 21800
                      • 174 Posts
                      Danke, danke yoomai, das war’s. smiley Was hat mich das an Zeit gekostet vorher! Hätte beinah von modx abspringen müssen. Is wohl ein Lapsus der Installation und ein Mangel an Member mit entsprechenden Anforderungen.