
虚拟主机域名注册-常见问题 → 其他问题 → 其他问题 | |||||||
[分享]Url编解码(C)_rs编解码 c代码 _ASP PHP中文URL编解码
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!='\0') { if(*src=='+') { *dest++=' '; } else if(*src=='%') { int ch; ch=x2c(src+1); *dest++=ch; src+=2; } else { *dest++=*src; } src++; } *dest='\0'; return(dest-cp); } /* URL编码 */ size_t url_encode(const char *src, char *dest) { char *cp=dest; while(*src!='\0') { unsigned char *p=(unsigned char*)src; if(*p==' '){ *dest++='+'; } else if(unsafechar(*p)) { unsigned char w[3]={'\0'}; c2x(*p,w); *dest=w[0]; *(dest+1)=w[1]; *(dest+2)=w[2]; dest+=3; } else { *dest++=*p; } src++; } *dest='\0'; 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("%s\n",s); printf("%s\n",d); url_decode(d,d1); printf("%s\n",d1);
|
|||||||
>> 相关文章 | |||||||
没有相关文章。 |