使用unserialize函數將數據儲存到數據庫的時候遇到了這個報錯,后來發現是將gb2312轉換成utf-8格式之后,每個中文的字節數從2個增加到3個之后導致了反序列化的時候判斷字符長度出現了問題,所以需要使用正則表達式將序列化的數組中的表示字符長度的值重新計算一遍,代碼如下:
function mb_unserialize($serial_str) { $out = preg_replace_callback( '!s:(\d+):"(.*?)";!s', function($r){ return 's:'.strlen($r[2]).':"'.$r[2].'";'; }, $serial_str ); return unserialize($out); }