发信人: tcpip (俺的昵称改了), 信区: cnunix
标 题: CGI汉字问题的解决方法
发信站: 哈工大紫丁香 (Sun Sep 26 15:15:22 1999), 转信
发信人: cpu (奔腾的心), 信区: Solaris
发信站: 华南网木棉站 (Tue Aug 4 10:09:50 1998), 转信
这段时间与deng做CGI发现汉字传得不正常,仔细观察了一下终于找到解决方法。
对于asc码大于127(偶猜测而已,不一定;)的字符,浏览器传的是一个三元字
符序列,而不是单个的字符,格式为%XX,其中X为0~9和A~F,即%加该字符的十
六进制数。在server端这些三字符序列会被还原成本来的asc码,但是有一个问
题,server不会做截尾工作的,比如“a汉字b”一共六个字符,向server传的时
候变成“a%XX%XX%XX%XXb”十四个,server再还原即变成“a汉字bX%XX%XXb”,
后面的八个server仍旧保留,没有做截尾工作,因此多出了八个所谓的垃圾字符。
既然观察出了该规律,写一个转换算法就很容易了呵呵,泥调用了拆分函数得出
用户在浏览器form里面输入的字符串再调用cutcode就可以了。
/* cutcode.c, by cpu, for cgi chinese problem */
#include <string.h>
void cutcode(char * str)
{
int charpoint;
int codepoint;
int codelen;
codepoint = -1;
codelen = strlen(str);
for (charpoint = 0;charpoint < codelen;charpoint ++) {
if (str[charpoint] > 0) codepoint += 1; /* 正常字符 */
else codepoint += 3; /* asc大于127的字符 */
if (codepoint >= codelen) { /* 截尾操作 */
str[charpoint] = '\0';
break;
}
}
}
--
******************************************************
青岛啤酒,可能是世界上最好的啤酒 。。。 。。。
******************************************************
※ 修改:.trueip 于 Sep 26 15:19:08 修改本文.[FROM: dns.mtlab.hit.ed]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: dns.mtlab.hit.ed]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: trueip.bbs@melon.gzn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.547毫秒