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

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

以下给出实现:

  1. unsigned char ToHex(unsigned char x)
  2. {
  3. return  x > 9 ? x + 55 : x + 48;
  4. }
  5. unsigned char FromHex(unsigned char x)
  6. {
  7. unsigned char y;
  8. if (x >= 'A' && x <= 'Z') y = x - 'A' + 10;
  9. else if (x >= 'a' && x <= 'z') y = x - 'a' + 10;
  10. else if (x >= '0' && x <= '9') y = x - '0';
  11. else assert(0);
  12. return y;
  13. }
  14. std::string UrlEncode(const std::string& str)
  15. {
  16. std::string strTemp = "";
  17. size_t length = str.length();
  18. for (size_t i = 0; i < length; i++)
  19. {
  20. if (isalnum((unsigned char)str[i]) ||
  21. (str[i] == '-') ||
  22. (str[i] == '_') ||
  23. (str[i] == '.') ||
  24. (str[i] == '~'))
  25. strTemp += str[i];
  26. else if (str[i] == ' ')
  27. strTemp += "+";
  28. else
  29. {
  30. strTemp += '%';
  31. strTemp += ToHex((unsigned char)str[i] >> 4);
  32. strTemp += ToHex((unsigned char)str[i] % 16);
  33. }
  34. }
  35. return strTemp;
  36. }
  37. std::string UrlDecode(const std::string& str)
  38. {
  39. std::string strTemp = "";
  40. size_t length = str.length();
  41. for (size_t i = 0; i < length; i++)
  42. {
  43. if (str[i] == '+') strTemp += ' ';
  44. else if (str[i] == '%')
  45. {
  46. assert(i + 2 < length);
  47. unsigned char high = FromHex((unsigned char)str[++i]);
  48. unsigned char low = FromHex((unsigned char)str[++i]);
  49. strTemp += high*16 + low;
  50. }
  51. else strTemp += str[i];
  52. }
  53. return strTemp;
  54. }

C++写的UrlEncode和UrlDecode的更多相关文章

  1. Python 中的urlencode和urldecode

    python中的urlencode与urldecode 发表于2013/11/13 16:04:09  79983人阅读 分类: python 当url地址含有中文,或者参数有中文的时候,这个算是很正 ...

  2. python(24)urlencode和urldecode

    当url地址含有中文,或者参数有中文的时候,这个算是很难正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至‘/’做一下编码转换. 一.urlencode ur ...

  3. python的urlencode与urldecode

    ```python3.x中urlencode在urllib.parse模块中``` 当url地址含有中文,或者参数有中文的时候,这个算是很正常了,但是把这样的url作为参数传递的时候(最常见的call ...

  4. python中urllib的urlencode与urldecode

    当url地址含有中文,或者参数有中文的时候,这个算是很正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至'/'做一下编码转换. urlencode urlli ...

  5. Delphi UTF编码 UTF8Encode、UTF8Decode、URLEncode、URLDecode

    一.URL简介    URL是网页的地址,比如 http://www.cnblogs.com.Web 浏览器通过 URL 从 web 服务器请求页面.    由于URL字符串常常会包含非ASCII字符 ...

  6. java中URLEncode和URLDecode

    URLEncode和URLDecode用于完成普通字符串和 application/x-www-from-urlencoded MIME字符串之间的相互转化 如果传递的字符串中包含非西欧字符的字符串, ...

  7. PHP中的urlencode和urldecode的理解

    平时在工作中经常要写 $xxx = urldecode($_GET['xxx']);的类似代码,大部分的情况都是没有问题的.也能很好的工作. 所以也没有怎么在意.但是突然有一天我想到 $xxx =$_ ...

  8. URLEncode与URLDecode总结与实现

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

  9. Urlencode and Urldecode 命令行

    由于经常使用,简单记录之 $ alias urlencode='python -c "import sys, urllib as ul; print ul.quote_plus(sys.ar ...

随机推荐

  1. 【codeforces 768F】Barrels and boxes

    [题目链接]:http://codeforces.com/problemset/problem/768/F [题意] 让你把f个food和w个wine装在若干个栈里面; 每个栈只能装food或者是wi ...

  2. android startservice无法启动服务

    1.android startservice无法启动服务 之前MainActivity.java中启动service源代码如下: private void startMyService() { //启 ...

  3. Linux学习总结(16)——CentOS 下 Nginx + Tomcat 配置负载均衡

    最近在读埃隆·马斯克传记,他说「我认为现在有非常多的聪明人都在致力于互联网」. 仔细一想,好像真的是这样的. 我问了自己一个问题:如果你不敲代码了,你能做什么? 答案令人极其恐怖.吓得我赶紧又去写了一 ...

  4. 洛谷 P1556 幸福的路

    P1556 幸福的路 题目描述 每天,John都要为了农场里N(1≤N≤10)头牛的健康和幸福四处奔波. 每头牛的位置可以描述为一个二维坐标,John从坐标原点(0,0)出发.为了使路径更有趣,Joh ...

  5. iipccsxxtnsoiq

    gxspvyheuetwqgnbwmwd

  6. java基础——static keyword小节

    static 用于修饰成员 修饰成员变量和成员函数 被修饰过的成员的特点:   1.随着类的载入而载入   2.优先于对象而存在   3.被全部对象所共享   4.能够直接被类名调用

  7. bzoj2768: [JLOI2010]冠军调查(双倍经验最小割)

    2768: [JLOI2010]冠军调查 题目:传送门 题解: 双倍经验(1934) 代码: #include<cstdio> #include<cstring> #inclu ...

  8. Oracle RAC --安装图解

    规划:所用linux系统以虚拟化方式安装在esx上,配置有内网的yum源,各分配有16G存储,下面为简单拓扑图 一,下载软件1,地址:http://www.oracle.com/technology/ ...

  9. JS的数据类型(包含:7种数据类型的介绍、数据类型的转换、数据类型的判断)

    前言 最新的 ECMAScript 标准定义了JS的 7 种数据类型,其中包括: 6 种基本类型:Boolean.Null.Undefined.Number.String.Symbol (ECMASc ...

  10. 安装Windows服务方法

    用sc create 服务名 binPath="路径",不要用老方法InstallUtil会出现一堆的错误