Umstellung modified shopsoftware von ISO auf UTF-8 Zeichenkodierung

Die Geschichte der Zeichenkodierungen in PHP / Mysql Anwendungen ist eine Geschichte voller Missverständnisse. Unser Shop lief bis vor kurzem wie noch viele Webshops mit der Zeichenkodierung ISO-8859. Mit diesem Zeichensatz kann man die meisten westeuropäischen Zeichen (also auch Umlaute etc) speichern. Probleme bekommt man wenn zum Beispiel russische oder griechische Sonderzeichen verwenden werden. Da wir nur in Länder verkaufen in denen man mit ISO Zeichen auskommt war für mich die Umstellung auf UTF8 bisher kein Thema.

Da die kommenden Versionen von PHP > 5.4 aber UTF 8 als Standard verwenden und im Laufe der Recherche zu diesem Thema festgestellt habe das es einfach “besser” ist auf UTF 8 zu wechseln stand diese “Operation” nun an.

Dieses Dokument dient nur als meine persönliche Dokumentation da der Inhalt im wesentlichen aus diesem Dokument stammt. Auf einige Schritte habe ich verzichtet und ein Schritt kam zusätzlich.

Schritt 1 PHP Anwendung umstellen

vi .htaccess
   ##-- Default charset
   AddDefaultCharset UTF-8
   #AddDefaultCharset ISO-8859-15

vi include/configure.php  admin/include/configure.php
define('INSTALL_CHARSET', 'utf8');

Schritt 2 Datenbanken umstellen

  mysql -u adminuser -p
  ALTER DATABASE  shop DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
  use shop
  Reading table information for completion of table and column names
  You can turn off this feature to get a quicker startup with -A
  Database changed
  mysql> SELECT @@character_set_database, @@collation_database;
  +--------------------------+----------------------+
  | @@character_set_database | @@collation_database |
  +--------------------------+----------------------+
  | utf8                     | utf8_general_ci      |
  +--------------------------+----------------------+
  1 row in set (0.00 sec)

  mysql -u root -pgeheim --database=shop -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' | mysql -u root -pgeheim --database=shop 

Umstellung im Backend des Shops:

Backend => Land / Steuer => Sprachen => "meta-content" ("Charset" im Bearbeiten-Modus) auf utf-8 

Unbedingt aus und wieder einloggen !!!!

#Schritt 3 Sprachdateien bearbeiten

Das habe ich mit iconv für alle txt Dateien auf der Kommandozeile nach folgendem Schema gemacht

cd /templates/xtc5/mail/german
iconv -f ISO-8859-1 -t UTF-8 change_password_mail.txt > change_password_mail.txt.tmp &&  rm change_password_mail.txt &&  mv change_password_mail.txt.tmp change_password_mail.txt

#Schritt 4 Testworkflow durchlaufen

  • Anmelden mit Umlauten in Namen, Straße und Ort
  • Bestellen von Produkten mit Umlauten
  • Kommentar mit Umlauten
  • Backend: Bestellbestätigung mit Umlauten im Kommentar
  • Kennwort ändern mit Umlauten
  • Password anfordern
  • Account löschen
  • Backend: Attribute mit Umlaut geändert

Sieht alles gut aus. Der erste Tag brachte noch Fehlermeldungen in den Modulen Intraship und PDF Rechnungen.