php unserialize(): Error at offset 470 of 660 bytes

今天将serialize转义好的字符串直接写到代码中测试,发现unserialize时函数将数据储存到数据库的时候遇到了这个报错,发现是将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);
}
 
posted @ 2015-09-07 15:40  Forward1990  阅读(1949)  评论(0编辑  收藏  举报