URLEncode与URLDecode总结与实现

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         else
25         {
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 ---> 0x3f
23         {
24             if(*pSrc <= ‘9‘)//0x30~0x39
25             {
26                 cTmp |= (*pSrc & 0x0f) << (1 - k) * 4;
27             }
28             else if(*pSrc >= ‘a‘)//0x61~7a
29             {
30                 cTmp |= (*pSrc - 0x57) << (1 - k) * 4;
31             }
32             else//0x41~5a
33             {
34                 cTmp |= (*pSrc - 0x37) << (1 - k) * 4;
35             }
36         }
37         strDest += cTmp;
38     }
39     return 0;
40 }
时间: 2024-12-21 17:44:21

URLEncode与URLDecode总结与实现的相关文章

HtmlEncode、HtmlDecode、UrlEncode、UrlDecode

HtmlEncode: 将 Html 源文件中不允许出现的字符进行编码.例如:"<".">"."&" 等. HtmlDecode: 把经过 HtmlEncode编码过的字符解码 ,还原成原始字符. UrlEncode: 将 Url 中不允许出现的字符进行编码.例如:":"."/"."?" 等. UrlDecode: 把经过 UrllEncode编码过的字符解码 ,还原

Python 中的urlencode和urldecode

python中的urlencode与urldecode 发表于2013/11/13 16:04:09  79983人阅读 分类: python 当url地址含有中文,或者参数有中文的时候,这个算是很正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至'/'做一下编码转换. 一.urlencode urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,比如: >>

python(24)urlencode和urldecode

当url地址含有中文,或者参数有中文的时候,这个算是很难正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至‘/’做一下编码转换. 一.urlencode urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,比如: 1 >>> from urllib import urlencode 2 >>> data = { 3 ... 'a':

python中的urlencode与urldecode

当url地址含有中文,或者参数有中文的时候,这个算是很正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至'/'做一下编码转换. 一.urlencode urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,比如: >>> from urllib import urlencode >>> data = { ... 'a': 'test',

url 转码 urlencode和 urldecode

参考网址http://www.t086.com/code/php/function.php-urlencode.php urlencode 将字符串以 URL 编码. 语法: string urlencode(string str); 返回值: 字符串 函数种类: 编码处理 urlencode($url);   内容说明 本函数将字符串以 URL 编码.例如空格就会变成加号.Homepage 中 form 资料传送就是用 urlencode 编码后再送出. urldecode 还原 URL 编码

C++写的UrlEncode和UrlDecode

关于UrlEncode的实现(C++).网上有非常多不同的版本号.对须要编码的字符集的选取并不统一.那么究竟有没有标准呢?答案是有的.參见wiki 绝对不编码的,仅仅有字母.数字.短横线(-).下划线(_).点(.)和波浪号(~),其它字符要视情况而定.所以一般性的urlencode仅仅需保留上述字符不进行编码. 以下给出实现: [cpp] view plaincopy unsigned char ToHex(unsigned char x) { return  x > 9 ? x + 55 :

urlencode()和urldecode()

urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%.一般用在url链接地址编码urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符

基于Js实现的UrlEncode和UrlDecode函数代码

<script language="javascript">//UrlEncode函数function UrlEncode(str){  var ret="";  var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";  for(var i=0;i<str.length;i++){   var chr = str.charAt(i);    var c=str

UrlEncode和UrlDecode

//编码 HttpUtility.UrlEncode(str); HttpUtility.UrlEncode(str, 编码类型); //解码 HttpUtility.UrlDecode(str) //编码 Server.UrlEncode(str); //解码 Server.UrlDecode(str); 区别: HttpUtility.UrlEncode()默认是以UTF8对URL进行编码, 而Server.UrlEncode()则以默认的编码对URL进行编码. 例子