Php中unserialize()函数返回的是bool(false)

来源:互联网 发布:省市区数据库sql 编辑:程序博客网 时间:2024/05/06 04:21

这种情况发生的原因有多种可能,最大的可能就是在序列化数据的时候的编码和反序列化时的编码不一样导致字符串的长度出现偏差。例如数据库编码latin1UTF-8字符长度是不一样的。

解决方案:

自己从网上找的小函数来纠正序列化字符串中字符串长度的问题

Utf-8

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

ASC

function asc_unserialize($serial_str) {

   $serial_str=preg_replace('!s:(\d+):"(.*?)";!se','"s:".strlen("$2").":\"$2\";"',$serial_str);
     $serial_str= str_replace("\r", "", $serial_str);     
     return unserialize($serial_str);
 }