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);
}