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

(C++)UrlEncode的标准实现

时间:2016-09-21 13:04:13      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

关于UrlEncode的实现(C++),网上有很多不同的版本,对需要编码的字符集的选取并不统一。那么到底有没有标准呢?答案是有的,参见wiki

    绝对不编码的,只有字母、数字、短横线(-)、下划线(_)、点(.)和波浪号(~),其他字符要视情况而定,所以一般性的urlencode只需保留上述字符不进行编码。

    下面给出实现:

    unsigned char ToHex(unsigned char x)   
    {   
        return  x > 9 ? x + 55 : x + 48;   
    }  
      
    unsigned char FromHex(unsigned char x)   
    {   
        unsigned char y;  
        if (x >= A && x <= Z) y = x - A + 10;  
        else if (x >= a && x <= z) y = x - a + 10;  
        else if (x >= 0 && x <= 9) y = x - 0;  
        else assert(0);  
        return y;  
    }  
      
    std::string UrlEncode(const std::string& str)  
    {  
        std::string strTemp = "";  
        size_t length = str.length();  
        for (size_t i = 0; i < length; i++)  
        {  
            if (isalnum((unsigned char)str[i]) ||   
                (str[i] == -) ||  
                (str[i] == _) ||   
                (str[i] == .) ||   
                (str[i] == ~))  
                strTemp += str[i];  
            else if (str[i] ==  )  
                strTemp += "+";  
            else  
            {  
                strTemp += %;  
                strTemp += ToHex((unsigned char)str[i] >> 4);  
                strTemp += ToHex((unsigned char)str[i] % 16);  
            }  
        }  
        return strTemp;  
    }  
      
    std::string UrlDecode(const std::string& str)  
    {  
        std::string strTemp = "";  
        size_t length = str.length();  
        for (size_t i = 0; i < length; i++)  
        {  
            if (str[i] == +) strTemp +=  ;  
            else if (str[i] == %)  
            {  
                assert(i + 2 < length);  
                unsigned char high = FromHex((unsigned char)str[++i]);  
                unsigned char low = FromHex((unsigned char)str[++i]);  
                strTemp += high*16 + low;  
            }  
            else strTemp += str[i];  
        }  
        return strTemp;  
    }  

 

(C++)UrlEncode的标准实现

标签:

原文地址:http://www.cnblogs.com/john-h/p/5892145.html

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