每读取到一个 % 好后,将后面的两个字节字符(十六进制数)转换成一个字符(计算后的值,如%CB 变成值为123(0xcb)的一个字符),cgi Form 的中文解码与英文解码没有区别.

解决方案 »

  1.   

    //-----------------------------------------------------
    //   将 XX 形式的十六进制的数字(ASCII码)转换成字符
    //-----------------------------------------------------
    char cgiForm::x2c( const char *hex )
    {
    register char digit; digit = (hex[0] >= 'A' ? ((hex[0] & 0xdf) - 'A')+10 : (hex[0] - '0'));
    digit *= 16;
    digit += (hex[1] >= 'A' ? ((hex[1] & 0xdf) - 'A')+10 : (hex[1] - '0'));
    return(digit);
    }
    //-----------------------------------------------------
    //      按 URL 编码规则解码
    //        %XX 转换成字符
    //-----------------------------------------------------
    char *cgiForm::unescape( char *s )
    {
    register int x, y; for( x = 0, y = 0; s[y]; ++x, ++y )
    {
      if( ( s[x] = s[y] ) == '%')
     {
    s[x] = x2c( &s[y+1] );
    y += 2;
     }
    }
    s[x] = '\0';
    return( s );
    }
      

  2.   

    你如果需要完整的表单处理程序,请留下你的 e-mail , 我下次发给你.论坛上不能完整的贴出来.
      

  3.   

    chzy00(逸少) :谢谢!!我不需要完整的的表单处理程序,有个思路、算法就行了,我自已写。给分先!:)