荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: icefire (懒懒的心懒懒的我), 信区: Program
标  题: [转寄] [转载] 范文cgi:CGI汉字问题的解决方法
发信站: BBS 荔园晨风站 (Sun Nov 22 19:16:11 1998), 站内信件

【 以下文字转载自 icefire 的信箱 】
【 原文由 icefire.bbs@melon.gznet.edu.cn 所发表 】
发信人: italina (欣儿 — 忙于论文), 信区: CGI
标  题: [转载] 范文cgi:CGI汉字问题的解决方法
发信站: 华南网木棉站 (Mon Nov 16 22:50:24 1998), 站内信件

发信人: cpu (奔腾的心), 信区: Solaris
标  题: 范文cgi:CGI汉字问题的解决方法
发信站: 华南网木棉站 (Tue Aug  4 10:09:50 1998), 转信


这段时间与deng做CGI发现汉字传得不正常,仔细观察了一下终于找到解决方法。
对于非字母、数字及加号(在拆分函数中会被转换成空格)的字符,浏览器传的
是一个三元字符序列,而不是单个的字符,格式为%XX,其中X为0~9和A~F,即%加
该字符的十六进制数。在server端这些三字符序列会被还原成本来的asc码,但是
有一个问题,server不会做截尾工作的,比如“a汉字b”一共六个字符,向server
传的时候变成“a%XX%XX%XX%XXb”十四个,server再还原即变成“a汉字bX%XX%XXb”,
后面的八个server仍旧保留,没有做截尾工作,因此多出了八个所谓的垃圾字符。

既然观察出了该规律,写一个转换算法就很容易了呵呵,泥可以改我的cgiparse.c,
在CGI_get_inputs( )函数里面,把cutcode( )放在AddToSpace( )(即加号到空格
的转换)之前调用即可。

/* 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 (isalnum(str[charpoint]) || str[charpoint] == '+')
                        codepoint += 1;    /* 字母数字或加号 */
                else
                        codepoint += 3;    /* 需要转换的字符 */

                if (codepoint >= codelen) {     /* 截尾操作 */
                        str[charpoint] = '\0';
                        break;
                }

        }
}

--

        ******************************************************

               青岛啤酒,可能是世界上最好的啤酒 。。。 。。。

        ******************************************************

※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.96.151.219]
--
※ 转载:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.214.40]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: linux.szu.edu.cn]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.22]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店