ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • URL 인코딩
    인코딩 2009. 2. 22. 16:32

    void URLencode(  char * output ,   char * input)
    {
        // RFC 1738  참조
        // 16진수로 봐서 00-1F 랑 7F 값은 %를 붙이고 헥사로 바꾼다 .
        // 80-FF  그리고 아래와 같은 controlling character들
        //     { } | \ ^ ~    [ ] ` # ; / ? : @ = &
        // 예를 들어서 스페이스 ( 빈칸 )은
             // Dec 값으로 32구 Hex값으로 20이니까
             // 빈칸대신 %20 를 붙이는 식입니다

        int opt_inx, ipt_inx;

        for ( ipt_inx = 0 , opt_inx =0 ; input[ipt_inx]; ipt_inx++,opt_inx++)
        {
             int char_val = input[ipt_inx];
            if ( char_val < 0 ) char_val +=256;
    // 그리고 어레이를 참조하게 되면 그만큼 느리기때문에 char_val에 값을 넣습니다
    // char를 int 로 바꾸는 과정에서 127이 넘는 값은 음수로 들어가기때문에
    // 위와 같이 256을 더합니다


            if (
                char_val <= 0x1F ||
                char_val == 0x7F ||
                char_val >=0x80 ||
                char_val == ' ' ||
                char_val == '{' ||
                char_val == '}' ||
                char_val == '[' ||
                char_val == ']' ||
                char_val == '|' ||
                char_val == '\\' ||
                char_val == '^' ||
                char_val == '~' ||
                char_val == '`' ||
                char_val == '#' ||
                char_val == ';' ||
                char_val == '/' ||
                char_val == '?' ||
                char_val == '@' ||
                char_val == '=' ||
                char_val == '&'     )
            {
                output[opt_inx]='%';
               
                               int UpperBit = char_val / 0x10;
    // 16을 나눠서 상위바이트를 얻습니다.

                if (UpperBit >=0 && UpperBit <=9 )
                    output[++opt_inx]= UpperBit+'0';
                else
                    output[++opt_inx]= UpperBit+'A'-10;
    // 값을 보고 숫자인지 A~ E 인지 구분해보고 넣습니다.
               
               
    // 16으로 나누면 하위 바이트가 나오겠죠..

                int LowerBit = char_val % 0x10;
                if (LowerBit >=0 && LowerBit <=9 )
                    output[++opt_inx]= LowerBit+'0';
                else
                    output[++opt_inx]= LowerBit+'A'-10;
            }
            else
                output[opt_inx]=char_val;   
       
        }

        output[opt_inx]=0;
       

    }


    참조 사이트:
Designed by Tistory.