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

本文共 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://jzhym.baihongyu.com/

你可能感兴趣的文章
Python和Node.js支持尾递归吗?
查看>>
Live Messenger界面消失问题
查看>>
基础篇—SQL语句相关概念及练习
查看>>
用static定义静态全局变量
查看>>
BigPipe,加速你的页面加载
查看>>
让WCF客户端的“调用”成为一种“享受”
查看>>
iphone 如何卸载xcode4.2
查看>>
深入研究Servlet线程安全性问题
查看>>
JSP内置对象的四种属性范围
查看>>
GNU make manual 翻译(九十一)
查看>>
GNU make manual 翻译( 一百六十六)
查看>>
域名和cookie
查看>>
在LinkedIn的Ruby on Rails和Node.js对决
查看>>
MFC中App,Doc,MainFrame,View各指针的互相获取
查看>>
Java Web框架前景分析
查看>>
Eclipse快捷键大全
查看>>
2010-10-19 10:48 Activex调试以及m_hWnd为空 解决办法
查看>>
幼儿园3年(1986-1989年)
查看>>
WPF Step By Step 系列-Prism框架在项目中使用
查看>>
rdesktop:Linux 下的远程桌面客户端[转]
查看>>