[ Thumbsucker @ 31.05.2008. 14:14 ] @
Eh ovako, radi se o Opencart skripti za web shop,
prvo sam imao problema da u bazu ubacim slova čćšđž,
onda sam to rijesio tako sto sam u kod koji se bavi insertovanjem
korisnika i njegovih podataka u tabelu dodao
Code:
mysql_query("set names 'utf8'");

tako da sad u bazi imam ta slova i nisu napisana sibolima nego bas čćšđž.

Kasnije mi se pojavio problem sa funkcijom unserialize() koja vjerovatno ima
problema sa ovim karakterima tako da prilikom zakljucena narudzbe koja u bilo kojem svom podatku sadrzi neki od nasih znakova čćšđž dobivam gresku(ako nema čćšđž sve ide regularno):

Code:
Notice: unserialize() [function.unserialize]: Error at offset 93 of 4831 bytes in public_html/xy/shop/library/cart/order.php on line 111

Warning: Cannot modify header information - headers already sent by (output started at public_html/xy/shop/library/cart/order.php:111) in public_html/xy/shop/library/environment/response.php on line 22


a sporni dio koda je:

Code:
function load($reference) {        

        $sql        = "select distinct * from order_data where reference = '?'";

        $order_info = $this->database->getRow($this->database->parse($sql, $reference));

        
     
        if ($order_info) {

            $this->reference = $reference;

            $this->data = unserialize($order_info['data']);

            

            return TRUE;

        } else {

            return FALSE;

        }


zna li neko rjesenje za ovaj problem?
[ Nemanja Avramović @ 31.05.2008. 15:01 ] @
Nisam se nešto bavio ovim, ali možda da odradiš base64_encode na stringu pre serialize() a onda base64_decode posle unserialize() pri čitanju?

Zvuči ludo ali možda i pomogne
[ Thumbsucker @ 31.05.2008. 15:47 ] @
e super ti je ideja samo sto ta funkcija prihvata samo stringove, a meni treba za niz, a da bi enkodiro niz moras ga prvo serializovat ako se ne varam, ali
naveo si me na slijedece:

nesto razmisljam uz pomoc funkcije str_replace, ali nece da mi nadje č i ć, jel trebam ubaciti ascii simbole, sta mislis?
probao sam ovako:
Code:
$delete = "č";
    $order_info = str_replace($delete, "tvrdoc", $order_info);
    $delete = "ć";
    $order_info = str_replace($delete, "mekoc", $order_info);
    $delete = "đ";
    $order_info = str_replace($delete, "nijedz", $order_info);


a onda poslije ovo promjenim opet u č i ć
[ Nemanja Avramović @ 31.05.2008. 16:11 ] @
Šta imaš u tom nizu? Enkoduj svaki element niza pre serijalizovanja ako nije velik
A replace bi trebalo da radi, ali probaj sa http://php.net/mb_ereg_replace
[ Thumbsucker @ 31.05.2008. 16:30 ] @
mozes li mi napisati kako cu primjenit mb_ereg_replace na svaki element u nizu?
[ zedin @ 31.05.2008. 19:07 ] @
Najbolje je da prvo probas sve da sačuvaš u UTF-8, nije dovoljno samo da na stranicu staviš charset=UTF-8 ( i to ima veze, jer od charseta na stranici zavisi kakve ćeš podatke dobiti u skripti ) , nego i da je snimiš sa tim enkodiranjem , isto važi i za html i za php fajlove, tako ćeš biti siguran da su podržani naši znakovi.

Kada uradiš $str = serialize($nesto) , prije zapisa u bazu dovoljno je da uradis $str = mysql_escape_string ( $str ) , i onda neće biti problema kod zapisa u bazu.

Za snimanje fajla sa UTF koristi Notepad2 ili PHP designer, jer sam primjetio da ova opcija neradi kod nekih editora.
[ Thumbsucker @ 01.06.2008. 11:02 ] @
Evo uspio sam rijesiti problem, ako nekome bude poslije trebalo:
Ubacio sam ove dvije linije koda:

Na početku order.php
Code:
mysql_query('SET NAMES "UTF8"');

I na spornom mjestu:
Code:
$order_info = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $order_info );