发信人: 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)
页面执行时间:2.033毫秒