获取html中的汉字

 //---------------------------------------------------------------------------  
  //   把/字符换成换行符,把^字符换成=号,把+号变为%A1   如果是汉字内码则转换为汉字  
  AnsiString   TRequest::ParseParams(AnsiString   tt)  
  {  
          int   n;  
   
            //把汉字内码提取出来  
            /*  
                  把等号后面&前的字串符串送入   StrToHz   函数进行过滤。如果是汉字内码则以汉字代替  
            */  
          AnsiString   ss(tt),aa(""),bb("");  
          int   n1=0,n2=0;  
            //算法:对等号后的数据进行替换。把替换数据前的等号换为^符   ,直到把所有等号后面的数据  
            //替换完,把所有的=符换为^  
          while   (1)  
          {  
   
                n1   =   ss.Pos("=");  
                if   (   n1   ==0   )     break;  
                ss.Delete(n1,1);  
                n2   =   ss.Pos("&");  
   
                if   (   n2!=0   )  
                {  
                      aa   =   ss.SubString   (n1,n2-n1);  
                      aa   =   aa+   "%";  
                      bb   =   StrToHz   (   aa.c_str()   );  
                      bb   =   "^"+   bb;  
                      bb   =   bb   +   "/""   ;  
                      ss.Delete(n1,n2-n1+1);  
                      ss.Insert   (bb,   n1   );  
                }  
              //内容的结尾无&符  
              else  
              {  
                    aa   =   ss.SubString   (n1,500);  
                    aa   =   aa+   "%";  
                    bb   =   StrToHz   (   aa.c_str()   );  
                    bb   =   "^"+   bb   ;  
                    ss.Delete(n1,500);  
                    ss.Insert   (   bb,   n1   );  
                }  
          }//while  
   
          tt   =   ss;  
          //把/字符换成换行符  
          while   (1)   {  
                n=   tt.Pos("/"");  
                if   (   n==0)   break;  
                tt.Delete(n,1);  
                tt.Insert("/r/n",n);  
                }  
          tt   +=   "/r/n";  
        //把^字符换成=号  
          for   (int   n=1;   n<=tt.Length();   n++)  
                  if   (tt[n]==&apos;^&apos;)   tt[n]=&apos;=&apos;;  
           
          //把+字符换成  
   
          for   (int   n=1;   n<=tt.Length();   n++)  
                  if   (tt[n]==&apos;+&apos;)   tt[n]=&apos;   &apos;;  
   
          return   tt;  
  }  
   
  /*  
  把   汉字的内码转换为汉字  
  输入:  
          汉字的内码字符串   format   1."%CC%C6%B2%AE%BB%A2iloveyou%"   ASCII字符在内码中或最后  
                                                          2."iloveyou%CC%C6%B2%AE%BB%A2%"   ASCII字符在最前或无内码  
  输出:  
          汉字  
  */  
  AnsiString   TRequest::StrToHz(char*   str)  
  {  
   
                //分离其他的字母或 数字 等符号  
                        AnsiString   aa,ss(str);  
                        ss.Trim   ();  
                        AnsiString   mm(""),nn("");  
                        char   *   hz;  
                        char   tmp[3];  
                        char   hex[4];  
                        int     n1=0,n3=0,n4=0;  
                        int     len   =   strlen   (str);  
                        hz   =   new   char[len];  
                        ZeroMemory   (hz,len   );  
                        int     i=0;  
                        //字符串符号是否在汉字前  
                        n1   =   ss.Pos   ("%");  
                        //格式2  
                        if     (   n1   !=1   )  
                        {  
                                  strcpy   (hz,   ss.SubString(1,n1-1).c_str());  
                                  i   =   n1-1;  
                                  aa   =   ss.SubString   (   n1   ,len-n1+1);  
                        }  
                        else  
                                  aa   =   str;  
                      //格式1  
                        while   (1)  
                              {  
                                    n3   =   aa.Pos   ("%");  
                                    if   (   n3   ==0   )   break;  
                                    aa.Delete(   n3,1);  
                                    n4   =   aa.Pos   ("%");  
                                    if   (   n4   ==0   )   break;  
   
                                    mm   =   aa.SubString   (n3,n4-n3);  
                                    int   len2=   mm.Length();  
                                    //汉字的2个内码加上其他字符  
                                    if   (   len2   >2   )  
                                      {  
                                          //提取出前两个内码  
                                          strcpy   (tmp,   mm.SubString   (1,2).c_str()   );  
   
                                          nn.sprintf("0x%s",tmp);  
                                          hz   [i]=   nn.ToInt   ();  
                                          i++;  
                                          //把后面的字符拷贝到数组中  
                                          memcpy   (hz+i,   mm.SubString(3,len2-2).c_str(),len2-2   );  
   
                                          i   =   i+len2-2;  
   
                                      }  
                                      //只有汉字的2个内码  
                                    else   if   (   len2==2   )  
                                    {  
                                            strcpy   (tmp,mm.c_str()   );  
   
                                            nn.sprintf("0x%s",tmp);  
                                            hz   [i]   =   nn.ToInt   ();  
                                            i++;  
                                    }  
   
   
                              }  
                       
                        hz[   strlen(hz)   ]=   &apos;/0&apos;;  
                        ss   =   hz;  
                        delete[]   hz;  
   
                        return         ss;  
  }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值