• 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;
    }*/
  • 相关阅读:
    CentOS 7 nginx+tomcat9 session处理方案之session保持
    利用tcp三次握手,使用awl伪装MAC地址进行多线程SYN洪水攻击
    Docker 基础 (一)
    去哪儿笔试的三个编程题
    [PAT乙级题解]——宇宙无敌加法器
    结构型设计模式
    行为型设计模式
    [PAT乙级题解]——快速排序
    创建型设计模式
    [PAT乙级题解]——试密码
  • 原文地址:https://www.cnblogs.com/yiguxianyun/p/6063043.html
Copyright © 2020-2023  润新知