由於preg_replace 在php5.5以上已經不支持/e 使用unserialize函數將數據儲存到數據庫的時候遇到了這個報錯,後來發現是將gb2312轉換成utf-8格式以後,每一箇中文的字節數從2個增長到3個以後致使了反序列化的時候判斷字符長度出現了問題,因此須要使用正則表達式將序列化的數組中的表示字符長度的值從新計算一遍,代碼以下: $out = preg_replace_callback( '!s:(\d+):"(.*?)";!s', function($r){ return 's:'.strlen($r[2]).':"'.$r[2].'";'; }, $v['reciver_info'] ); $v['reciver_info'] = unserialize($out);