博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
URLEncode与URLDecode总结与实现
阅读量:6458 次
发布时间:2019-06-23

本文共 2115 字,大约阅读时间需要 7 分钟。

URLEncode:

  用于编码URL字符串,数字和字母保持不变,空格变为'+',其他(如:中文字符)先转换为十六进制表示,然后在每个字节前面加一个标识符%,
例如:“啊”字 Ascii的十六进制是0xB0A1——>%B0%A1

代码实现:

1 unsigned char CHAR_TO_HEX( unsigned char ch ) 2 { 3     //0xa(10)转化为字符'A'(65),要加上55 //0x0(0)转化为字符'0'(48),要加上48 4     return (unsigned char)(ch > 9 ? ch + 55: ch + 48); 5 } 6  7 std::string URLEncode(const char* pSrc) 8 { 9     unsigned char chTemp;10     std::string strDest;11 12     while (*pSrc)13     {14         chTemp = (unsigned char)*pSrc;15         if ( (chTemp >= 'a' && chTemp <= 'z') || (chTemp >= 'A' && chTemp <= 'Z') || (chTemp >= '0' && chTemp <= '9')16             || strchr("-_.!~*'()", chTemp))17         {18             strDest += chTemp;19         }20          else if (chTemp == ' ')21          {22              *pDest++ = '+';23          }24         else25         {26             strDest += '%';27             strDest += CHAR_TO_HEX( (unsigned char)(chTemp >> 4) );28             strDest += CHAR_TO_HEX( (unsigned char)(chTemp & 0x0f) );29         }30         ++pSrc;31     }32 33     return strDest;34 }

 

URLDecode:

  用于解码已编码的URL 字符串,解码方式与URLEncode相反

代码实现:

1 unsigned char* URLDecode(unsigned char* pSrc, std::string &strDest) 2 { 3     char szTemp[2]; 4  5     while (*pSrc) 6     { 7         memset(szTemp, '/0', 2 ); 8         if( *pSrc != '%' && *pSrc != ' ') 9         {10             strDest += *pSrc++;11             continue;12         }13         else if( *pSrc == ' ' )14         {15             strDest += '+';16             continue;17         }18         //忽略%19         ++pSrc;20         unsigned char cTmp = 0;21 22         for (int k = 0; k < 2 && *pSrc; ++k, ++pSrc)    //例如:将%3f ---> 0x3f23         {24             if(*pSrc <= '9')//0x30~0x3925             {26                 cTmp |= (*pSrc & 0x0f) << (1 - k) * 4;27             }28             else if(*pSrc >= 'a')//0x61~7a29             {30                 cTmp |= (*pSrc - 0x57) << (1 - k) * 4;31             }32             else//0x41~5a33             {34                 cTmp |= (*pSrc - 0x37) << (1 - k) * 4;35             }36         }37         strDest += cTmp;38     }39     return 0;40 }

 

转载地址:http://wjizo.baihongyu.com/

你可能感兴趣的文章
谈Linq To Sql的优劣--纯个人观点
查看>>
HDU 4996 Revenge of LIS(DP)
查看>>
App里面如何正确显示用户头像
查看>>
DATAGUARD维护:从库宕机后如何恢复到管理恢复模式
查看>>
Android中的PID和UID
查看>>
MAC下上公司内网
查看>>
CentOS7.4安装mysql5.7
查看>>
U-BOOT之一:BootLoader 的概念与功能
查看>>
我的路上
查看>>
Velocity处理多余空白和多余空白行问题
查看>>
内容开发平台(PLATFORM)
查看>>
java值传递
查看>>
判断一个数是否为素数的一个讨论(一)
查看>>
DB2与oracle有什么区别
查看>>
创建一个多级文件目录
查看>>
Picasa生成图片幻灯片页面图文教程
查看>>
js获取当前时间的前一天/后一天
查看>>
[洛谷P3978][TJOI2015]概率论
查看>>
Python学习——编程语言介绍
查看>>
Python字符串的格式化
查看>>