• C++写的UrlEncode和UrlDecode


      关于UrlEncode的实现(C++)。网上有非常多不同的版本号。对须要编码的字符集的选取并不统一。那么究竟有没有标准呢?答案是有的。參见wiki

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

        以下给出实现:


    1. unsigned char ToHex(unsigned char x)   
    2. {   
    3.     return  x > 9 ? x + 55 : x + 48;   
    4. }  
    5.   
    6. unsigned char FromHex(unsigned char x)   
    7. {   
    8.     unsigned char y;  
    9.     if (x >= 'A' && x <= 'Z') y = x - 'A' + 10;  
    10.     else if (x >= 'a' && x <= 'z') y = x - 'a' + 10;  
    11.     else if (x >= '0' && x <= '9') y = x - '0';  
    12.     else assert(0);  
    13.     return y;  
    14. }  
    15.   
    16. std::string UrlEncode(const std::string& str)  
    17. {  
    18.     std::string strTemp = "";  
    19.     size_t length = str.length();  
    20.     for (size_t i = 0; i < length; i++)  
    21.     {  
    22.         if (isalnum((unsigned char)str[i]) ||   
    23.             (str[i] == '-') ||  
    24.             (str[i] == '_') ||   
    25.             (str[i] == '.') ||   
    26.             (str[i] == '~'))  
    27.             strTemp += str[i];  
    28.         else if (str[i] == ' ')  
    29.             strTemp += "+";  
    30.         else  
    31.         {  
    32.             strTemp += '%';  
    33.             strTemp += ToHex((unsigned char)str[i] >> 4);  
    34.             strTemp += ToHex((unsigned char)str[i] % 16);  
    35.         }  
    36.     }  
    37.     return strTemp;  
    38. }  
    39.   
    40. std::string UrlDecode(const std::string& str)  
    41. {  
    42.     std::string strTemp = "";  
    43.     size_t length = str.length();  
    44.     for (size_t i = 0; i < length; i++)  
    45.     {  
    46.         if (str[i] == '+') strTemp += ' ';  
    47.         else if (str[i] == '%')  
    48.         {  
    49.             assert(i + 2 < length);  
    50.             unsigned char high = FromHex((unsigned char)str[++i]);  
    51.             unsigned char low = FromHex((unsigned char)str[++i]);  
    52.             strTemp += high*16 + low;  
    53.         }  
    54.         else strTemp += str[i];  
    55.     }  
    56.     return strTemp;  
    57. }  
  • 相关阅读:
    USACO Section 1.4 Mother's Milk
    USACO Section 1.5 Checker Challenge
    USACO Section 1.5 Number Triangles
    九度 1140 八皇后
    九度 1091 棋盘游戏
    USACO Section 2.1 Sorting A ThreeValued Sequence
    USACO Section 1.4 The Clocks
    USACO Section 1.5 Superprime Rib
    USACO Section 2.1 Ordered Fractions
    双目测距与三维重建
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6915447.html
Copyright © 2020-2023  润新知