矮人村

 找回密码
 立即注册
查看: 307|回复: 0
打印 上一主题 下一主题

url解码

[复制链接]

29

主题

29

帖子

241

积分

注册会员

Rank: 2

积分
241
QQ
跳转到指定楼层
楼主
发表于 2017-9-3 22:02:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/* 16进制字符表 */
static const char c2x_table[] = "0123456789ABCDEF";
/* 字符转16进制 */
static unsigned char *c2x(unsigned what,unsigned char *where)
{
*where++ = '%';
*where++ = c2x_table[what>>4];
*where++ = c2x_table[what&0xf];
return where;
}
/* 16进制转字符 */
static char x2c(const char *what)
{
register char digit;
digit = ((what[0] >= 'A') ? ((what[0] & 0xdf) - 'A') + 10 : (what[0] - '0'));
digit *= 16;
digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A') + 10 : (what[1] - '0'));
return (digit);
}
/*
%^[]`+$,@:;/!#?=&.
不安全字符及特殊字符
*/
static int unsafechar(unsigned char ch)
{
unsigned char *p=&ch;
if(*p==' '||*p==''||*p=='%'||*p==''||*p=='^'||*p=='['||*p==']'||*p=='`'
||*p=='+'||*p=='$'||*p==','||*p=='@'||*p==':'||*p==';'
||*p=='/'||*p=='!'||*p=='#'||*p=='?'||*p=='='||*p=='&'||*p=='.'||*p>0x80){
return(1);
}
else{
return(0);
}
}
/*
URL解码
*/
size_t url_decode(const char *src,char *dest)
{
char *cp=dest;
while(*src!='')
{
if(*src=='+')
{
*dest++=' ';
}
else if(*src=='%')
{
int ch;
ch=x2c(src+1);
*dest++=ch;
src+=2;
}
else
{
*dest++=*src;
}
src++;
}
*dest='';
return(dest-cp);
}
/*
URL编码
*/
size_t url_encode(const char *src, char *dest)
{
char *cp=dest;
while(*src!='')
{
unsigned char *p=(unsigned char*)src;
if(*p==' '){
*dest++='+';
}
else if(unsafechar(*p))
{
unsigned char w[3]={''};
c2x(*p,w);
*dest=w[0];
*(dest+1)=w[1];
*(dest+2)=w[2];
dest+=3;
}
else
{
*dest++=*p;
}
src++;
}
*dest='';
return(dest-cp);
}
int main()
{
char *s="中国人民@#$%^&*();/@";
char *d=NULL,*d1=NULL;
d=(char *)malloc(100);
d1=(char *)malloc(100);
memset(d,0,100);
memset(d1,0,100);
url_encode(s,d);
printf("%sn",s);
printf("%sn",d);
url_decode(d,d1);
printf("%sn",d1);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

标签|手机版|小黑屋| 矮人村

GMT+8, 2024-12-24 02:23 , Processed in 0.140401 second(s), 37 queries , Gzip On.

Powered by 小矮人挖矿

© 2016 矮人村 版权所有

快速回复 返回顶部 返回列表