Alternatywna funkcja mb_strtolower, jest to funkcja w php która nie pobiera sobie kodowania ze strony, tylko pozwala je przekazać przez parametr.
Jeżlei chodzi o jej podmianę to chodzi dokładnie o zamianę np:
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(
strtolower($keyword)) . "%'";
na
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(
mb_strtolower($keyword, 'UTF-8')) . "%'";
Dokumentacja:
http://php.net/manual/en/function.mb-strtolower.phpspowoduje to, że ciąg znaków będzie konwertowany przy pomocy kodowania utf-8 a nie wg tego na stronie.
W przypadku wyszukiwarki odpowiednim modelem jest plik '
catalog/model/catalog/product.php' a metoda odpowiedzialna za wyszukiwanie to:
getProductsByKeywordOd razu zaznaczam że to rozwiązanie ma swoje wady i o takiej zmianie trzeba pamiętać przy każdej aktualizacji.
Drugą opcją jest zmiana template w taki sposób żeby wstawiał znacznik "<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />" do nagłówka strony. Problem jest taki że tego nie testowałem i nie wiem jak się strtolower zachowa bo nadal pliki opencart nie są kodowane w UTF-8, wg dokumentacji jest to istotne (nie mam co do tego pewności ale znalazłem kilka wpisów na różnych forach php że ma to znaczenie):
"Note that 'alphabetic' is determined by the current locale. This means that in i.e. the default "C" locale, characters such as umlaut-A (Ä) will not be converted."
Najlepiej by było zgłośic poprawkę do OC, która w domyslnej dystrybucji OC zaczęła by używać mb_strtolower ale wtedy OC wymagałby PHP 4 >= 4.3.0, PHP 5