xtCommerce: Template auf UTF-8 umstellen

Da xtCommerce generell auf iso-latin1 aufbaut und ich diese Kodierung für fehleranfällig und nervig halte (wieso nicht immer utf8? I don’t know!) folgt hier eine schnelle Anleitung, wie man die komplette xtCommerce Shop-Installation auf utf-8 umstellen kann:

Zuerst muss die Datenbank auf utf8 umgestellt werden. Hier beginnen wir mit der Gesamtdatenbank, die mittels
[source language=“:php“]ALTER DATABASE <datenbank>
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;[/source] auf UTF8 umgestellt wird. Leider müssen wir das gleiche Prozedere bei sämtlichen dort genutzten Tabellen vollziehen.

Der entsprechende Befehl pro Tabelle lautet
[source language=“:php“]ALTER TABLE <tabelle>
CONVERT TO CHARACTER SET utf8
COLLATE utf8_general_ci;[/source]

Für eine relativ standardmässige xtCommerce Installation mit den unzähligen Tabellen lautet die komplette SQL Befehlskette so wie in dieser Datei niedergeschrieben ist (für die schnellen: Runterladen, und copy paste soll helfen).

Danach folgt die Anpassung der Header Ausgaben (generell in der Datei /includes/header.php, etwa Zeile 35), damit im HTML Header korrekterweise [source language=“:html“]<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />[/source] ausgegeben wird. Im Quelltext steht dort allerdings bereits [source language=“:html“]<meta http-equiv="Content-Type" content="text/html; charset=&lt;?php echo $_SESSION[‚language_charset‘]; ?&gt;" />[/source] so dass lediglich der Wert für das Feld language_charset in der ‚languages‘ Tabelle auf utf-8 umgestellt werden muss, wie in diesem phpMyAdmin Screenshot zu sehen ist:

Anpassung der Language Kodierung

Zu guter Letzt muss der Datenbankverbindung noch mitgeteilt werden, dass sämtliche Gespräche mit der Datenbank in UTF8 ablaufen. Dies erfolgt in MySQL mit dem Befehl „SET NAMES ‚UTF8‘„, das am Besten dort integriert wird, wo die Datenbankverbindung aufgebaut wird, nämlich in der Datei inc/xtc_db_connect.inc.php:

Anpassung der Datenbankverbindungsdatei

Wie man sehen kann steht die mysql_query(); in dem Screenshot in Zeile 26 kurz vor der Auswahl der benötigten Datenbank.

Zum Schluss kann noch auf einige Unzulänglichkeiten beim Editieren von Bestellungen (orders_edit.php) und beim Senden von Nachrichten von der Webseite hingewiesen werden, über die ich momentan noch nicht gestolpert bin und somit auch noch nicht 100% getestet habe.

6 Gedanken zu „xtCommerce: Template auf UTF-8 umstellen“

  1. Danke für die Anleitung, hat bei uns problemlos funktioniert.
    Wer zusätzlich noch die xt:c – Afterbuy Schnittstelle für die Abwicklung seiner Shopbestellungen nutzt, muss noch in der Datei /include/classes/afterbuy.php folgende Zeile einfügen:

    $DATAstring = iconv(„UTF-8″,“ISO-8859-1″,“$DATAstring“);

    Ungefähr Zeile 300 direkt über folgendem Code:
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $DATAstring);
    $result = curl_exec($ch);

    Damit werden alle Daten, die zuvor in $DATAstring gespeichert wurden mittels iconv() von UTF-8 in ISO-8859-1 umgewandelt und danach über die CURL Funktion an Afterbuy übertragen. Vorher aber Daten sichern!

  2. Hallo,

    Vielen Dank erstmal für die einfache und genaue Anleitung.

    Habe alles wie beschrieben durchgeführt. Alles funktioniert auch wunderbar der Seiteninhalt ist in utf-8 und auch das Datenbank. Bis auf die Metatags gibt es keine Probleme, bei dem Meta title und description tauchen komische Zeichen und Entities auf. Diese werden leider nicht in utf-8 ausgegeben. Woran könnte das denn liegen? Ich habe XTC Modified installiert. Auf eure Hilfe würde ich mich sehr freuen.

    mfg

  3. Ich würde zu deeinr Auflistung oben noch den Punkt “Eingaben vom User” hinzufügen, da ich öfter das Problem hatte, dass die User Eingabe als latin1 gesendet werden. Die Lösung ist natürlich wieder einfach, im muss man als einziges charset UTF8 erlauben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.