ShopNix

Tagebuch eines Shops auf Basis von osCommerce

Archive for the ‘Sprachen’ Category

Zeichensätze im Shop

leave a comment »


Inzwischen ist der internationale Zeichensatz utf8 schon fast Standard. Wer Shops in verschiedenen Sprachen betreut, wird daher über kurz oder lang darauf umstellen um Konvertierungen zwischen den verschiedenen Zeichensätzen künftig zu vermeiden.

MySQL bietet dazu eine Vielzahl von Parametern, deren Auswirkungen bedacht sein wollen. Die Parametern sind in Systemvariablen abgelegt und können vom Client abgefragt werden.

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

Diese Parameter können teilweise auch vom Client per SQL geändert werden und ihr Zusammenspiel ist nicht nur für die Ausgabe wesentlich, sondern auch für die Sortierfolge oder die Suche nach Strings mit dem Schlüsselwort LIKE. In Abhängigkeit von den Einstellungen konvertiert MySQL ggfls. die Ausgabe. Hat man alles richtig gemacht, sieht nicht nur die Ausgabe sauber aus, sondern eine Suche nach einem Suchbegriff mit Umlaut bringt, unabhängig von der Groß- / Kleinschreibung, alle Ergebnisse.

Für meinen VARIO-Helicopter Shop zog ich zunächst einen Dump und kodierte ihn mit dem Linux-Tool recode von iso-8859-15 nach utf8 um. Anschließend fügte ich folgende Zeilen ein:

ALTER DATABASE `3_vario-es` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
set names 'utf8';
set character set 'utf8';

und las den Dump in die Datenbank ein. Um auch die Clientverbindung zum Shop richtig einzustellen, fügte ich anschließend in shop/includes/functions/database.php ab Zeile 22 zwei zusätzliche Zeilen ein:

    if ($$link) {
    	mysql_select_db($database);
// ShopNix.b 
    	mysql_query("set names 'utf8'");
    	mysql_query("set character set 'utf8'");
// ShopNix.e
    }

Aufpassen: Die Funktion muß natürlich auch im Admin-Bereich angepasst werden!

Die sprachabhängigen Dateien habe ich ebenfalls mit recode umkodiert und in der jeweiligen Führungsdatei (z.B. german.php) die Konstanten für die Kodierung angepasst. Aufpassen: Der W3C-Standard will die Schreibweise „utf-8“ für die HTML-Header, MySQL braucht „utf8“!

Zum Umkodieren mit PHP5 muss (unter Debian) das Paket php5-recode installiert sein. Hier ein Beispiel des Funktionsaufrufs: mysql_real_escape_string(recode_string('ISO-8859-1..UTF-8', $row['categories_name'])) im Zusammenhang mit einem Transfer von der alten Datenbank mit ISO-8859-1 Kodierung zur aktuellen Datenbank mit UTF-8.

Advertisements

Written by spessart

11. November 2009 at 09:31

Zeichensatz, von ISO-8859-x zu UTF-8

leave a comment »


Es gibt eine Reihe guter Gründe, auf den Internationalen Zeichensatz UTF-8 umzustellen.

  • Alle Sprachen können im gleichen Zeichensatz behandelt werden
  • Betriebssysteme stellen um
  • XHTML nennt UTF-8 als Standard
  • Browser schalten automatisch auf UTF-8 wenn nicht explizit anderes gefordert wird

Im osCommerce Shop stellt man den Zeichensatz in der ersten sprachabhängigen Datei pro Sprache ein, z.B. in includes/languages/german.php, jeweils ein Mal pro Sprache, für Shop und Admin getrennt.

Standardmäßig wird Deutsch in ISO-8859-1 ausgeliefert, dem Zeichensatz für Westeuropa. Der Wert ist als Konstante definiert [define(‚CHARSET‘, ‚iso-8859-1‘);] und taucht im Quelltext der ausgelieferten HTML-Seite als Meta-Tag wieder auf.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Will ich nun umstellen, genügt es natürlich nicht, nur diese Einstellung zu ändern, denn die soll nur den Browser darüber informieren, wie die Seite zu interpretieren ist. Ich muss außerdem die sprachabhängigen Dateien umkodieren. Unter Linux geht das sehr schön mit dem Tool „recode“.

recode ISO-8859-1..UTF-8 german.php

Der gegebene Anlaß für diese Aktion ist die Anforderung, einen polnischen Shop aufzubauen. Die passende Sprach-Contribution steht im Zeichensatz für Mitteleuropa, ISO-8859-2 zur Verfügung, und ich codiere sie schon vor der Inbetriebnahme um.

Für die Datenübernahme bekomme ich eine Exceltabelle, die ich mit OpenOffice öffne und als ASCII-Datei gleich in UTF-8 abspeichere.

Written by spessart

26. März 2009 at 23:49

Veröffentlicht in osCommerce, Sprachen

Tagged with , , , ,