Problem z wielkimi/małymi polskimi znakami

em

No avatar

2008-06-26 15:17

Witam. Mam nastepujący problem. Gdy produkt zawiera WIELKI polski znak (Ą, Ę, itd) nie można go wyszukać wpisując nazwę z małą literą. Na przykład gdy nazwa produktu brzmi: ŻARÓWKA to wpisanie żarówka zwraca pusty rezultat. Odwrotnie jest analgoczinie. Ktoś ma jakiś pomysł jak to naprawić?

» Quick.Cart v3.x

em

treewood (OpenSolution)

Avatar: treewood

2008-06-26 17:17

em - czy sprawdzales to na innych serwerach? Bycmoze masz jakies ustawienia serwera dziwne...

em

No avatar

2008-06-26 18:25

Tak, sprawdzałem na dwóch. Wydaje mi się, że problemem jest tutaj kodowanie w UTF-8 i niepoprawna któraś z funkcji odpowiedzialna za jego obsługę. W sklepach quick.cart z kodowaniem iso8859-2 (lub cp1250 - sam nie wiem dokładnie) działa bez problemu. Istnieje jakaś prosta i szybka metoda na zmianę kodowania z UTF-8 na ISO-8859-2? Może to rozwiąże problem...

em

em

No avatar

2008-07-06 21:19

Problem tkwi w funkcji PHP stristr(), która jest CaseSensitive, ale nie dla danych w formaice UTF najwyraźniej.
Dla wszystkich, którzy będą mieli ten problem w przyszłości:
1. Edytujemy plik core/products.php
2. Odnajdujemy linijki z łańcuchem (bez cudzysłowiu): "stristr("
3. Parametry tej funkcji przepuszczamy przez funkcję change2Latin().

Przykładowa linijka kodu przed:
if( stristr( implode( ' ', $aData ), $aWords[$i] ) ) $iFound++;

i po:
if( stristr( change2Latin(implode( ' ', $aData )), change2Latin($aWords[$i]) ) )
$iFound++;

Nie jest to rozwiązanie doskonałe, ale póki autorzy nie wymyślą czegoś lepszego musi wystarczyć.

Pozdrawiam :)

em

treewood (OpenSolution)

Avatar: treewood

2008-07-07 07:37

em - dziekuje bardzo za informacje. Widac troche siedzisz w temacie. Jesli stristr jest problemem to moze eregi() ? Co prawda jest to wolniejsze ale moze to zadziala:

if( eregi$aWords[$i], implode' '$aData ) ) )
  
$iFound++;

Do góry
o nas | kontakt