教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 php提示Notice:unserialize()[function.unserialize]:Error错误解决办法

php提示Notice:unserialize()[function.unserialize]:Error错误解决办法

发布时间:2017-12-13   编辑:jiaochengji.com
教程集为您提供php提示Notice:unserialize()[function.unserialize]:Error错误解决办法等资源,欢迎您收藏本站,我们将为您提供最新的php提示Notice:unserialize()[function.unserialize]:Error错误解决办法资源
在使用php中serialize函数时会出现示Notice:unserialize()[function.unserialize]:Error错误了,下面我们来看问题解决办法。

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

分析一:在数据进行存储并反序列化时编码问题出错

这个原因是很常见的,比方,原本是以GBK编码进行存储,然后是UTF-8编码的,那么在进行unserialize()就会有问题;

解决方法一:将UTF-8编码的数据转换成GBK,PHP语言可以用iconv()函数;

分析二:重写反序列函数

一些情况可以把底层的函数重写,将gb2312转换成utf-8格式之后,每个中文的字节数从2个增加到3个之后导致了反序列化的时候判断字符长度出现了问题,所以需要使用正则表达式将序列化的数组中的表示字符长度的值重新计算一遍,代码如下:

function mb_unserialize($serial_str) {
    $out = preg_replace('!s:(\d ):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str );
    return unserialize($out);
}

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

您可能感兴趣的文章:
php提示Notice:unserialize()[function.unserialize]:Error错误解决办法
php异常:Parse error: syntax error, unexpected eval()'d code error
PHP Parse Error: syntax error, unexpected $end 错误解决办法
Fatal error: Maximum execution time of 30 错误解决办法
php syntax error, unexpected $end 错误怎么解决
PHP5.3提示Fatal error: Undefined class constant MYSQL_ATTR_INIT_COMMAND
MySQL出现Errcode:28错误提示解决办法
office 2010安装提示错误 Error 1401、1404、1406怎么办
php提示 Warning: touch() [function.touch]: Utime failed: Permission denied in错误
MAC本地安装Ghost提示错误原因分析 MAC本地安装Ghost提示错误解决办法

[关闭]
~ ~