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);
}
posted @ 2013-11-18 23:54  smismile  阅读(468)  评论(0编辑  收藏  举报