newtype
::: newtype의 지식창고 :::
newtype
전체 방문자
오늘
어제
  • 분류 전체보기 (392)
    • Dev (214)
      • C, C++ (43)
      • Go (5)
      • Web (49)
      • DBMS (21)
      • DevOps (8)
      • Java (2)
      • Windows, Win32 (4)
      • Visual Basic (5)
      • C# (2)
      • Mobile (25)
      • SQL CE (7)
      • Google Map (6)
      • Python (2)
      • cygwin (2)
      • 기타 (32)
      • Ruby (1)
    • 명언 (10)
    • 모임 (18)
      • 붕주회 (3)
      • 신흥컴정 (14)
      • 웹20기 (1)
    • 사진 (8)
    • 불펌 (29)
    • 막글 (98)
    • 게임 (6)
    • 여행 (8)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

  • whoami
05-18 02:08
hELLO · Designed By 정상우.
newtype

::: newtype의 지식창고 :::

Dev/C, C++

URL Encoding/Decoding 함수

2007. 4. 5. 13:25
URL을 인코딩/디코딩 하는 함수를 만들어 봤습니다.

URL Encoding
char *URLencpy(char *enc, char *src)
{
    char buf[2+1];
    int i, j;
    unsigned char c;
    if(src==0||enc==0) return 0;

    for(i=j= 0; src[i]; i++)
    {
        c = (unsigned char)src[i];
        if (c == ' ') enc[j++] = '+';
        if ((c >= '0') && (c <= '9')) enc[j++] = c;
        else if ((c >= 'A') && (c <= 'Z')) enc[j++] = c;
        else if ((c >= 'a') && (c <= 'z')) enc[j++] = c;
        else if ((c == '@') || (c == '.')) enc[j++] = c;
        else {
            sprintf(buf, "%02x", c);
            enc[j++] = '%';
            enc[j++] = buf[0];
            enc[j++] = buf[1];
        }
    }
    enc[j] = '\0';

    return enc;
}

URL Decoding
char *URLdecpy(char *dec, char *src)
{
   int i, j;
   unsigned char c=0;
    if(src==0 || dec==0) return 0;

   for(i=j=0; src[i]; i++,j++)
   {
      if(src[i] == '+')
      {
          dec[j] = ' ';
          continue;
      }

      dec[j] = src[i];
      if(src[i] != '%') continue;

      c = src[++i];
      if(c >= '0' && c <= '9')            dec[j] = c - '0';
      else if(c >= 'A' && c <= 'F')        dec[j] = c - 55;
      else if(c >= 'a' && c <= 'f')        dec[j] = c - 87;
      else return 0;

      c = src[++i];
      dec[j] *= 16;
      if(c >= '0' && c <= '9')          dec[j] += (c - '0');
      else if(c >= 'A' && c <= 'F')     dec[j] += (c - 55);
      else if(c >= 'a' && c <= 'f')     dec[j] += (c - 87);
      else return 0;
   }
  
   dec[j] = '\0';
   return dec;
}

SAMPLE 프로젝트
invalid-file



반응형

'Dev > C, C++' 카테고리의 다른 글

xor을 이용한 swap 함수  (0) 2007.08.09
socket connect timeout  (2) 2007.05.29
Registry 읽고 쓰기 재활용  (0) 2007.03.31
애플리케이션 개발시의 메모리 디버깅 : 메모리 누수 발견 기법  (0) 2007.03.19
http socket client  (0) 2006.11.23
    'Dev/C, C++' 카테고리의 다른 글
    • xor을 이용한 swap 함수
    • socket connect timeout
    • Registry 읽고 쓰기 재활용
    • 애플리케이션 개발시의 메모리 디버깅 : 메모리 누수 발견 기법
    newtype
    newtype
    지극히 개인적인 지식의 창고

    티스토리툴바