首頁 > php教程 > php手册 > Notice:unserialize()[function.unserialize]:Error错误

Notice:unserialize()[function.unserialize]:Error错误

WBOY
發布: 2016-06-06 20:11:51
原創
1361 人瀏覽過

出现这个错误,可能会有几种原因,网上搜索的答案基本也是比较有针对性的一方面,关键在如何去寻找原因,并解决它。 分析一:在数据进行存储并反序列化时编码问题出错 这个原因是很常见的,比方,原本是以GBK编码进行存储,然后是UTF-8编码的,那么在进行uns

出现这个错误,可能会有几种原因,网上搜索的答案基本也是比较有针对性的一方面,关键在如何去寻找原因,并解决它。

分析一:在数据进行存储并反序列化时编码问题出错
这个原因是很常见的,比方,原本是以GBK编码进行存储,然后是UTF-8编码的,那么在进行unserialize()就会有问题;
解决方法一:将UTF-8编码的数据转换成GBK,PHP语言可以用iconv()函数;

分析二:重写反序列函数
一些情况可以把底层的函数重写,将gb2312转换成utf-8格式之后,每个中文的字节数从2个增加到3个之后导致了反序列化的时候判断字符长度出现了问题,所以需要使用正则表达式将序列化的数组中的表示字符长度的值重新计算一遍,代码如下:
function mb_unserialize($serial_str) {<br> ? ? $out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str );<br> ? ? return unserialize($out);<br> }

解决方法三:对字符数据进行base64_encode,然后serialize序列化,还原提取时,unserialize()再base64_decode

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板