[PHP] Multi-byte unserialize

PHP 2011. 9. 16. 19:06



배열을 serialize 한 다음에 iconv 같은걸로 인코딩을 변경한 다음 다시 unserialize 하면 안된다.
serialize 하면 배열의 요소중 문자열은 길이를 포함하여 저장되는데,
인코딩이 바뀔 경우 문자열의 길이가 달라질 수 있기 때문이다.

그럴 경우를 대비하여 필요한 것이 아래의 함수.
http://php.net/unserialize 페이지의 댓글에서 찾아냄.

function mb_unserialize($serial_str)
{
    $out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str);
    return unserialize($out);
}





Posted by bloodguy
,