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.