Portál AbcLinuxu, 10. května 2025 05:08
Zdravim,
mam tu zapeklity problem, kdysi davno jsem delal eshop a data z kosiku jsem serializoval a rval do db (pekna prasarna, nicmene to fungovalo). Vsechno jede doted a ok, az na 1 pripad, data jsem serializoval a pri vytahnuti z db nejdou unserialozovat. var_dump pise, false, zkousel jsem to na vice hostinzich a nejde to, leda postupne policko po policku (struktura je asi takova:
array('0' => array(<prvky polozky v kosiku (mnozstvi, cena atp)>), '1' => array(<dalsi polozka>));
nerikam, ze je to neresitelny pripad, jen me zajima, jak se neco takoveho muze stat, jak tomu predejit a nejlepe jak to jednoduse vyresit .
serializovane data:
http://www.maad.sk/data.html
error_reporting = E_ALL
:
Notice: unserialize() [function.unserialize]: Error at offset 293 of 6564 bytes in /home/zephyr/Web/tests/unserialize.php on line 9 bool(false)Zkoušel jsem se vrtat jen v prvním "subpoli" – chyba je u položky s klíčem
text1
. V serializovaném tvaru je u ní uvedena délka 74 bytů:
s:5:"text1";s:74:"Fašiangový halový turnaj 1. miesto 4. ročník - Lendak 14.02.2010"V UTF-8 však ten text má 69 bytů. Tohle už například deserializovat jde (74 opraveno na 69):
a:15:{s:3:"kod";s:4:"8027";s:3:"typ";s:1:"D";s:8:"mnozstvi";i:1;s:4:"cena";d:21.5;s:7:"rozmery";s:5:"37x14";s:4:"kryt";s:0:"";s:9:"podstavec";s:0:"";s:5:"barva";s:0:"";s:6:"stitek";s:3:"zst";s:5:"text1";s:69:"Fašiangový halový turnaj 1. miesto 4. ročník - Lendak 14.02.2010";s:5:"text2";s:0:"";s:7:"emblem1";s:0:"";s:7:"emblem2";s:0:"";s:7:"figurka";s:0:"";s:5:"stuha";s:0:"";}Podobné chyby jsou i u dalších "subpolí", oprava není těžká. Jako příčinu problému bych si tipnul nějaké čachry s kódováním – znaky s diakritikou snadno mohly změnit délku stringu měřenou v bytech.
var_dump(iconv_get_encoding('all'));
třeba se nějaké 1250 objeví :)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.