Html & Script

자바스크립트 unserialize 함수

페이지 정보

본문

j님이 예전에 올렸던 팁이 unserialize 라고 생각했는데 지금 보니까 그것도 serialize 였더군요. ㅡ.ㅡ; 거친마루님의 말도 있고 해서 내친김에 unserialize 도 만들어 봤습니다.

PHP에서도 클래스는 serialize 할 때 변수만 포함하더군요. 파싱하는 형태는 배열형, 객체형, 문자형, 정수형, 실수형, 널(null) 입니다.

사용예1)
원래 형태 :
class obj
{
    var $var1 = 2;
    function obj() { echo 1; }
    function func2() { echo 2; }
}
$obj = new obj();
serialize($obj);
실행 : obj = unserialize('O:3:"obj":1:{s:4:"var1";i:2;}');
결과 : obj.var1 == 2

사용예2)
원래형태 :
$str = 'abcdefg';
serialize($str);

실행 : str = unserialize('s:7:"abcdefg";');
결과 : str == 'abcdefg';

사용예3)
원래형태 :
$arr = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
serialize($arr);

실행 : arr = unserialize('a:11:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:10;i:10;}');
결과 : arr[0] = 0 ... arr[10] == 10;

소스)
function unserialize (str) {
    var retVal, Len, Key, Val;

    switch(str.substring(0, 1)) {
        case 'N':
            unserialize.str = str.substring(2);
            return null;
            break;
        case 'd':
            retVal = parseFloat(str.substring(2, str.indexOf(';')));
            unserialize.str = str.substring(str.indexOf(';')+1);
            break;
        case 'i':
            retVal = parseInt(str.substring(2, str.indexOf(';')));
            unserialize.str = str.substring(str.indexOf(';')+1);
            break;
        case 's':
            Len = parseInt(str.substring(2, str.indexOf(':', 2)));
            retVal = str.substr(4 + Len.toString().length, Len);
            unserialize.str = str.substring(Len.toString().length + Len + 6);
            break;
        case 'a':
            retVal = new Array;
            str = str.substring(str.indexOf('{', 3) + 1);
            while (str.substring(0, 1) != '}') {
                Key = unserialize(str); str = unserialize.str;
                Val = unserialize(str); str = unserialize.str;
                retVal[Key] = Val;
            }
            unserialize.str = str.substring(1);
            break;
        case 'O':
            retVal = new Object;
            str = str.substring(str.indexOf('{', 3) + 1);
            while (str.substring(0, 1) != '}') {
                Key = unserialize(str); str = unserialize.str;
                Val = unserialize(str); str = unserialize.str;
                eval("retVal." + Key + " = Val;");
            }
            unserialize.str = str.substring(1);
            break;
    }
    return retVal;
}

관련자료

등록된 댓글이 없습니다.
Today's proverb
옛날이 좋다고들 하지만 오늘이 더 좋습니다. 그리고 새로운 내일이 다가옵니다. 우리들의 가장 위대한 노래는 아직 불려지지 않았습니다. (험프리)