码迷,mamicode.com
首页 > 编程语言 > 详细

C++ URLDecode和URLEncode实现

时间:2016-11-14 20:26:31      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:namespace   ring   url   com   name   stat   int   space   char   

转载——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;
}*/

C++ URLDecode和URLEncode实现

标签:namespace   ring   url   com   name   stat   int   space   char   

原文地址:http://www.cnblogs.com/yiguxianyun/p/6063043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!