📄 urlencode.cpp
字号:
/************************************************************************
qDecoder - Web Application Interface for C/C++ http://www.qDecoder.org
Copyright (C) 2001 The qDecoder Project.
Copyright (C) 1999,2000 Hongik Internet, Inc.
Copyright (C) 1998 Nobreak Technologies, Inc.
Copyright (C) 1996,1997 Seung-young Kim.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Copyright Disclaimer:
Hongik Internet, Inc., hereby disclaims all copyright interest.
President, Christopher Roh, 6 April 2000
Nobreak Technologies, Inc., hereby disclaims all copyright interest.
President, Yoon Cho, 6 April 2000
Seung-young Kim, hereby disclaims all copyright interest.
Author, Seung-young Kim, 6 April 2000
************************************************************************/
#include "stdafx.h"
#include "URLencode.h"
char _x2c(char hex_up, char hex_low);
/**********************************************
** Usage : qURLencode(string to encode);
** Return: Pointer of encoded str which is memory allocated.
** Do : Encode string.
**********************************************/
char *qURLencode(char *str) {
char *encstr, buf[2+1];
unsigned char c;
int i, j;
if(str == NULL) return NULL;
if((encstr = (char *)malloc((strlen(str) * 3) + 1)) == NULL) return NULL;
for(i = j = 0; str[i]; i++) {
c = (unsigned char)str[i];
if((c >= '0') && (c <= '9')) encstr[j++] = c;
else if((c >= 'A') && (c <= 'Z')) encstr[j++] = c;
else if((c >= 'a') && (c <= 'z')) encstr[j++] = c;
else if((c == '@') || (c == '.') || (c == '/') || (c == '\\')
|| (c == '-') || (c == '_') || (c == ':') ) encstr[j++] = c;
else {
sprintf(buf, "%02x", c);
encstr[j++] = '%';
encstr[j++] = buf[0];
encstr[j++] = buf[1];
}
}
encstr[j] = '\0';
return encstr;
}
/**********************************************
** Usage : qURLdecode(query pointer);
** Return: Pointer of query string.
** Do : Decode query string.
**********************************************/
char *qURLdecode(char *str) {
int i, j;
if(!str) return NULL;
for(i = j = 0; str[j]; i++, j++) {
switch(str[j]) {
case '+':{
str[i] = ' ';
break;
}
case '%':{
str[i] = _x2c(str[j + 1], str[j + 2]);
j += 2;
break;
}
default:{
str[i] = str[j];
break;
}
}
}
str[i]='\0';
return str;
}
/**********************************************
** You don't need to use below functions.
** It is just used internally.
**********************************************/
char _x2c(char hex_up, char hex_low){
char digit;
digit = 16 * (hex_up >= 'A' ? ((hex_up & 0xdf) - 'A') + 10 : (hex_up - '0'));
digit += (hex_low >= 'A' ? ((hex_low & 0xdf) - 'A') + 10 : (hex_low - '0'));
return (digit);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -