Dev/C, C++

URL Encoding/Decoding 함수

newtype 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 프로젝트



반응형