php unserialize失败返回false原因多半是序列化数据时的编码与反序列化时的编码不一致,导致单引号等特殊字符计算长度不正确,所以解决办法是重新计算长度。百度了很多办法,全是坑呀,百度的那些办法根本没用,都是错的。所以自己写了个,绝对有效!
反序列化时用下面函数处理下就行
function common_unserialize($serial_str) {
$serial_str = preg_replace_callback('/s:(\d+):"([\s\S]*?)";/', function($matches) {
return 's:'.strlen($matches[2]).':"'.$matches[2].'";';
}, $serial_str);
return unserialize($serial_str);
}