Chinaunix
标题:
紧急求助关于html decode
[打印本页]
作者:
gejiajie_01
时间:
2009-03-31 11:36
标题:
紧急求助关于html decode
想用C写一个html格式汉字解码的函数,不知道怎么写(例:开是html编码格式,对应中文是 “开”字),有哪位大哥有的贴一下,只要C的,其他的就不要了,小弟真心感谢各位的帮助。
作者:
gejiajie_01
时间:
2009-03-31 13:21
小弟在线等
作者:
Sorehead
时间:
2009-03-31 16:58
字符串替换一下不就行了
作者:
gejiajie_01
时间:
2010-02-21 11:45
哪位大哥请给出代码,谢谢
作者:
MMMIX
时间:
2010-02-21 15:52
哪位大哥请给出代码,谢谢
gejiajie_01 发表于 2010-02-21 11:45
作业?工作任务?
作者:
gejiajie_01
时间:
2010-02-21 17:14
C++之类的都有库函数来实现,C找不到,有代码的请帮忙贴下,谢谢
作者:
gejiajie_01
时间:
2010-02-21 17:19
写了一支垃圾程式,可以输出&#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;
}
作者:
gejiajie_01
时间:
2010-02-21 17:20
输出结果是:dd{@
32r4@aaa.com
作者:
gejiajie_01
时间:
2010-02-21 17:22
代码中 a[]=dd{...中的 “{”字符请换成&#的格式,xxx为123,其他照贴,请各位大侠帮忙debug看看,谢谢
作者:
gejiajie_01
时间:
2010-02-23 10:07
这个问题真的很难吗?有哪位大侠帮忙看看呢,感激不尽
作者:
gejiajie_01
时间:
2010-02-24 10:53
char* htmldecode(char *p, int *str_len, char *buf)
{
register i=0, len=0;
char *q;
char tmp[8192];
unsigned int c;
bzero(buf, sizeof(buf));
bzero(tmp, sizeof(tmp));
strncpy(tmp, p, *str_len);
(*str_len)=0;
p=tmp;
while(*(p+i))
{
if ((*p=*(p+i)) == '&' && *(p+i+1) == '#' )
{
q=p+i;
while(*q != ';') q++;
len=q-p-i;
c=(atoi(p+i+2));
memcpy(buf, &c, 2);
buf+=2;
p++;
(*str_len)+=2;
i=q-p;
}else{
c=(*p);
memcpy(buf, &c, 2);
buf+=2;
(*str_len)+=2;
}
p++;
}
*p='\0';
}
int main(){
char a[]="aa我@.doc@sadf@";
int len;
int i;
unsigned char *str = (unsigned char *) malloc (strlen(a)*2);
len=strlen(a);
htmldecode(a, &len, str);
printf("%s\n", a);
for(i=0; i<len; i++)
printf("%c", str[i]);
free(str);
return 0;
}
作者:
gejiajie_01
时间:
2010-02-24 10:54
终于弄出来了,只不过字符是utf-16的,要转成UTF-8比较好,我就不转了,自己给自己结贴 !
作者:
gejiajie_01
时间:
2010-02-24 10:56
对,UTF-16转UTF-8我也发过帖子,想看的可以search下
作者:
wesleyluo
时间:
2010-03-11 17:05
输出中文字符肯定要字符集啦?
你装没?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2