unserialize反序列化错误的解决办法
有些时候由于序列化的编码问题,当反序列化时会出现结果为false的情况,解决办法是将unserialize函数扩展成如下函数:
1. 若要反序列化为UTF-8:
function mb_unserialize($serial_str) { $serial_str = str_replace("\r", "", $serial_str); $serial_str = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str ); return unserialize($serial_str); }
2. 若要反序列化为GBK:
function mb_unserialize($serial_str) { $serial_str = str_replace("\r", "", $serial_str); $serial_str = preg_replace('!s:(\d+):"(.*?)";!se', '"s:".strlen("$2").":\"$2\";"', $serial_str ); return unserialize($serial_str); }