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
ALTER DATABASE <datenbank>
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci; auf UTF8 umgestellt wird. Leider müssen wir das gleiche Prozedere bei sämtlichen dort genutzten Tabellen vollziehen.

Der entsprechende Befehl pro Tabelle lautet
ALTER TABLE <tabelle>
CONVERT TO CHARACTER SET utf8
COLLATE utf8_general_ci;

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 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ausgegeben wird. Im Quelltext steht dort allerdings bereits <meta http-equiv="Content-Type" content="text/html; charset=&lt;?php echo $_SESSION['language_charset']; ?&gt;" /> 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.

Etwas Werbung dazu:

Posted Montag, März 16th, 2009 um 11:56
Eingestellt in: Projekte, Technik, Web
Bitte Nachricht hinterlassen, oder Trackback von Deinem Blog setzen.

4

Responses to “xtCommerce: Template auf UTF-8 umstellen”

Steffen Schuchardt

Vielen Dank für diese gelungene Anleitung.

XT:Commerce auf UTF-8 umstellen inkl. Afterbuy Anbindung | Hermosisimo

[...] Wer wie wir seine xt:commerce Datenbank auf UTF-8 umstellen muss oder möchte findet eine sehr gute Anleitung im Blog von Reiten, Schwimmen,Lesen. [...]

Tobias

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!

Lasse

Hi Tobias,

danke für die weiteren Tipps und die Anleitung zur Nutzung von Afterbuy!

Leave a Reply