zoukankan      html  css  js  c++  java
  • C++ URLDecode和URLEncode实现——仅限gb2312,非utf8

    转载——http://blog.163.com/zhangjie_0303/blog/static/9908270620148251658993/
     
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
     
    using namespace std;
     
    typedef unsigned char BYTE;  
       
        inline BYTE toHex(const BYTE &x)  
        {  
            return x > 9 ? x -10 + 'A': x + '0';  
        }  
      
        inline BYTE fromHex(const BYTE &x)  
        {  
            return isdigit(x) ? x-'0' : x-'A'+10;  
        }  
       
        inline string URLEncode(const string &sIn)  
        {  
            string sOut;  
            for( size_t ix = 0; ix < sIn.size(); ix++ )  
            {        
                BYTE buf[4];  
                memset( buf, 0, 4 );  
                if( isalnum( (BYTE)sIn[ix] ) )  
                {        
                    buf[0] = sIn[ix];  
                }  
                //else if ( isspace( (BYTE)sIn[ix] ) ) //貌似把空格编码成%20或者+都可以  
                //{  
                //    buf[0] = '+';  
                //}  
                else  
                {  
                    buf[0] = '%';  
                    buf[1] = toHex( (BYTE)sIn[ix] >> 4 );  
                    buf[2] = toHex( (BYTE)sIn[ix] % 16);  
                }  
                sOut += (char *)buf;  
            }  
            return sOut;  
        };  
      
        inline string URLDecode(const string &sIn)  
        {  
            string sOut;  
            for( size_t ix = 0; ix < sIn.size(); ix++ )  
            {  
                BYTE ch = 0;  
                if(sIn[ix]=='%')  
                {  
                    ch = (fromHex(sIn[ix+1])<<4);  
                    ch |= fromHex(sIn[ix+2]);  
                    ix += 2;  
                }  
                else if(sIn[ix] == '+')  
                {  
                    ch = ' ';  
                }  
                else  
                {  
                    ch = sIn[ix];  
                }  
                sOut += (char)ch;  
            }  
            return sOut;  
        }  
     
    /*int main(int argc, char** argv)
    {
            string test_str1 = "老同学";
            //string test_str2 = URLEncode(test_str1);
            string test_str2 = "%89%E6%B1%89%E6%B1%89";
            cout << "test_str2=" << test_str2 <<endl;
            string test_str3 = URLDecode(test_str2);
            cout << "test_str3=" << test_str3 <<endl;
            return 0;
    }*/
  • 相关阅读:
    Jenkins系列之二——centos 6.9 + JenKins 安装
    查看linux系统是运行在物理机还是虚拟机方法
    Java 的不可变类 (IMMUTABLE CLASS) 和 可变类 (MUTABLE CLASS)
    Java中的mutable和immutable对象实例讲解
    理解Java中的引用传递和值传递
    深入理解Java中的Clone与深拷贝和浅拷贝
    java Clone使用方法详解
    Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
    赏美-第[001]期-20190504
    赏美-第[000]期
  • 原文地址:https://www.cnblogs.com/yiguxianyun/p/6063043.html
Copyright © 2011-2022 走看看