17
2013
osCommerce – Zmiana kodowania znaków ISO-8859-2 na UTF-8
Każdy kto prowadzi sklep na osCommerce i integrował z nim zewnętrzne systemy, spotkał się z problemem kodowania znaków przy wymianie informacji pomiędzy nimi.
Polska wersja językowa osCommerce powstała w czasie, gdy kodowanie UTF-8 nie było jeszcze powszechnie przyjętym standardem. Od kilku lat UTF jest normą i dzięki temu mamy znacznie ułatwioną komunikację pomiędzy systemami w różnych językach ze znakami diakrytycznymi. Każdy programista pracujący na OSC przy integrowaniu zewnętrznych modułów musiał użyć funkcji konwertujących iconv
lub mb_convert_encoding
itp. Następnie nie zawsze to musiało działać jak należy i czekało tłumaczenie klientowi co się wydarzyło, o co dokładnie chodzi, co to w ogóle jest kodowanie znaków, skąd te krzaki na stronie itd… Jednym słowem łańcuch problemów :/
Aby tego uniknąć, opiszę jak krok po kroku w bezpieczny sposób przekonwertować pliki sklepu oraz jego bazę danych.
Zmiana kodowania w osCommerce – krok po kroku:
- Backup wszystkich plików sklepu z serwera i pobranie ich na dysk lokalny.
Zamiast TotalCommander, najlepiej do tego użyć FileZilla, która posiada funkcję rozbudowanego kolejkowania plików wraz automatycznym odnawianiem zerwanego połączenia. - Przekonwertowanie wszystkich plików sklepu na serwerze z ISO na UTF.
Najlepiej do tego użyć rodzimego programu Gżegżółka. Zanim cokolwiek zrobimy dobrze jest zrobić kopię zapasową tego co pobraliśmy z serwera na dysk, w przypadku, gdy coś pójdzie nie tak przy konwertowaniu.Następnie ładujemy pliki i wybieramy poniższe opcje:
- Zmiana configu CHARSET w pliku polish.php.
Fragment
define('CHARSET', 'iso-8859-2');
zamień na
define('CHARSET', 'utf-8');
- Przeszukanie wszystkich plików w katalogu sklepu na serwerze szukając ciągu znaków iso-, następnie zamiana na utf-8.
Jest to bardzo istotne. Jeżeli przed nami w danym sklepie grzebał inny programista mógł nie używać stałej CHARSET i wpisywał na sztywno iso-8859-2. Tak, są tacy ludzie :) - Przeszukać pliki ciągiem znaków iconv lub mb_convert_encoding.
Te funkcje najczęściej są używane przy konwertowaniu znaków przy wymianie danych pomiędzy systemami. Należy sprawdzić czy są jeszcze potrzebne lub zmodyfikować je, jeżeli istnieje taka potrzeba. - Blokada sklepu w godzinach nocnych.
Wówczas jest najmniej zamówień (chociaż to zależy od strefy czasowej klientów).
Ważne, aby zablokować sklep przed dumpem bazy danych. Dzięki temu unikniemy desynchornizacji bazy danych (np. zamówienia, sesje użytkowników itd…).Możesz to zrobić wpisując na początku pliku
../includes/application_top.php
fragment kodu1234header("HTTP/1.1 503 Service Temporarily Unavailable"); // info dla Googleheader("Status: 503 Service Temporarily Unavailable");header('Retry-After: 10800'); // czas liczony w sekundachdie('Chwilowa przerwa techniczna. Przepraszamy.');.
- Backup bazy danych. Zrzut do pliku całej bazy danych na dysk lokalny.
Możesz do tego użyć standardowo phpMyAdmin lub HeidiSQL.
O tym jakie opcje wybrać używając pierwszego z nich znajdziesz tutaj w akapicie Przeniesienie bazy danych. - Ponowne załadowanie / upload przekonwertowanych plików na serwer.
- Przekonwertowanie w/w pliku bazy z ISO na UTF.
Ponownie użyj Gżegżółki :). Przed tym sprawdź czy na pewno jest kodowanie ISO-8859-2. Możesz to zrobić używając opcji Rozpoznanie. - Zmiana parametrów tabel z
latin2
nautf8_polish_ci
.
Poniżej przykład poprawnie przygotowanej tabeli do importu.123456789DROP TABLE IF EXISTS `zones`;CREATE TABLE IF NOT EXISTS `zones` (`zone_id` int(11) NOT NULL AUTO_INCREMENT,`zone_country_id` int(11) NOT NULL DEFAULT '0',`zone_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL DEFAULT '',`zone_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL DEFAULT '',PRIMARY KEY (`zone_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;Należy zwrócić uwagę na:
CHARACTER SET utf8 COLLATE utf8_polish_ci
oraz
DEFAULT CHARSET=utf8
Ważne, aby było to polish_ci a nie general_ci. Na general_ci MySQL przy użyciu funkcji sortującej wyniki nie będzie brał pod uwagę polskich liter. Potraktuje je jako litery zwykłe (bez ogonków) lub wyrzuci je na koniec listy.
- Ponowne załadowanie pliku zrzutu bazy danych na serwer.
- Przetestowanie/przeklikanie sklepu.
- Ewentualna zmiana kodowania przy połączeniu z bazą danych
SET NAMES UTF8
.
Jeżeli opisy produktów mają krzaki, wówczas spróbuj ustawić kodowanie znaków przy pobieraniu danych z bazy.
W pliku../includes/functions/database.php
(oraz to samo w katalogu admin)
po fragmencie
mysql_select_db($database);
wstaw
mysql_query('SET NAMES UTF8');
. - Sprawdzenie poprawności polskich liter w wysyłanych mailach.
- Ewentualne poprawki w przypadku błędnego wyświetlania polskich liter.
- Odblokowanie sklepu.
Podobne tematy
Dodaj komentarz
O mnie
Najnowsze wpisy
- Drzewo kategorii – budowa struktury od dołu do góry
- PHPExcel – export + import pliku XLS
- WordPress + Polylang – Tworzenie klasy CSS z ID strony/wpisu w wybranym języku
- Mailing – Poprawna konstrukcja szablonu maila HTML/CSS i prawidłowy wygląd w programie pocztowym
- Szukasz programisty PHP dla e-commerce?