- 论坛徽章:
- 0
|
写了一支垃圾程式,可以输出&#xx,&#xxx,但中文字符却怎么都输出不对,比如上述的“开”字,就输不出来,不晓得怎么回事,代码如下:
#include <stdio.h>
void urldecode(char *p)
{
register i=0, len=0;
char *q;
while(*(p+i))
{
if ((*p=*(p+i)) == '&' && *(p+i+1) == '#' )
{
q=p+i;
while(*q != ';') q++;
len=q-p-i-2;
//printf("%d\n", len);
switch(len)
{
case 2:*p=*(p+i+2) >= 'A' ? ((*(p+i+2) & 0XDF) - 'A') + 10 : (*(p+i+2) - '0');
*p=(*p) * 10;
*p+=*(p+i+3) >= 'A' ? ((*(p+i+3) & 0XDF) - 'A') + 10 : (*(p+i+3) - '0');
i+=4;
break;
case 3:*p=*(p+i+2) >= 'A' ? ((*(p+i+2) & 0XDF) - 'A') + 10 : (*(p+i+2) - '0');
*p=(*p) * 10;
*p+=*(p+i+3) >= 'A' ? ((*(p+i+3) & 0XDF) - 'A') + 10 : (*(p+i+3) - '0');
*p=(*p) * 10;
*p+=*(p+i+4) >= 'A' ? ((*(p+i+4) & 0XDF) - 'A') + 10 : (*(p+i+4) - '0');
i+=5;
break;
case 4:*p=*(p+i+2) >= 'A' ? ((*(p+i+2) & 0XDF) - 'A') + 10 : (*(p+i+2) - '0');
*p=(*p) * 10;
*p+=*(p+i+3) >= 'A' ? ((*(p+i+3) & 0XDF) - 'A') + 10 : (*(p+i+3) - '0');
*p=(*p) * 10;
*p+=*(p+i+4) >= 'A' ? ((*(p+i+4) & 0XDF) - 'A') + 10 : (*(p+i+4) - '0');
*p=(*p) * 10;
*p+=*(p+i+5) >= 'A' ? ((*(p+i+5) & 0XDF) - 'A') + 10 : (*(p+i+5) - '0');
i+=6;
break;
case 5:*p=*(p+i+2) >= 'A' ? ((*(p+i+2) & 0XDF) - 'A') + 10 : (*(p+i+2) - '0');
*p=(*p) * 10;
*p+=*(p+i+3) >= 'A' ? ((*(p+i+3) & 0XDF) - 'A') + 10 : (*(p+i+3) - '0');
*p=(*p) * 10;
*p+=*(p+i+4) >= 'A' ? ((*(p+i+4) & 0XDF) - 'A') + 10 : (*(p+i+4) - '0');
*p=(*p) * 10;
*p+=*(p+i+5) >= 'A' ? ((*(p+i+5) & 0XDF) - 'A') + 10 : (*(p+i+5) - '0');
*p=(*p) * 10;
*p+=*(p+i+6) >= 'A' ? ((*(p+i+6) & 0XDF) - 'A') + 10 : (*(p+i+6) - '0');
i+=7;
break;
}
}
p++;
}
*p='\0';
}
int main(){
char a[]="dd{@32r4@aaa.com";
urldecode(a);
printf("%s", a);
return 0;
} |
|