zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    Python深入05 装饰器
    Python深入04 闭包
    Python深入03 对象的属性
    Ubuntu (虚拟机同样) 更换内核?
    .out
    GCC 编译详解
    linux 编译内核 /boot空间不足?
    Java Swing提供的文件选择对话框
    Java Swing 实时刷新JTextArea,以显示不断append的内容?
    为什么要编译Linux内核?
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6915447.html
Copyright © 2011-2022 走看看