用VC实现post数据常常会遇到URL编码问题
在此封装一个工具类进行UTF8编码的转换
源码来自php source code
只是简单的封装给C++调用
 
  1. //URL 编解码类
  2. //来自PHP源码
  3. class CRtUrlConv
  4. {
  5. public:
  6. static char *urlencode(const char *in_str )
  7. {
  8. char *out_str;
  9. int in_str_len, out_str_len;
  10. in_str_len=strlen(in_str);
  11. out_str_len=0;
  12. out_str =  php_url_encode( in_str , in_str_len, &out_str_len);
  13. return (char *) out_str;
  14. }
  15. static int urldecode(char *s)
  16. {
  17. return php_url_decode(s);
  18. }
  19. private:
  20. static char *php_url_encode(const char *s , int len , int *new_length)
  21. {
  22. register unsigned char c;
  23. unsigned char *to, *start;
  24. unsigned char const *from, *end;
  25. from = (unsigned char *)s;
  26. end = (unsigned char *)s + len;
  27. start = to = new unsigned char[3*len+1];
  28. while (from < end) {
  29. c = *from++;
  30. if (c == ' ') {
  31. *to++ = '+';
  32. #ifndef CHARSET_EBCDIC
  33. } else if ((c < '0' && c != '-' && c != '.') ||
  34. (c < 'A' && c > '9') ||
  35. (c > 'Z' && c < 'a' && c != '_') ||
  36. (c > 'z')) {
  37. to[0] = '%';
  38. to[1] = HEXCHARS[c >> 4];
  39. to[2] = HEXCHARS[c & 15];
  40. to += 3;
  41. #else /*CHARSET_EBCDIC*/
  42. } else if (!isalnum(c) && strchr("_-.", c) == NULL) {
  43. /* Allow only alphanumeric chars and '_', '-', '.'; escape the rest */
  44. to[0] = '%';
  45. to[1] = HEXCHARS[os_toascii[c] >> 4];
  46. to[2] = HEXCHARS[os_toascii[c] & 15];
  47. to += 3;
  48. #endif /*CHARSET_EBCDIC*/
  49. } else {
  50. *to++ = c;
  51. }
  52. }
  53. *to = 0;
  54. if (new_length) {
  55. *new_length = to - start;
  56. }
  57. return (char *) start;
  58. }
  59. static int php_url_decode(char *str)
  60. {
  61. int len;
  62. char *dest = str;
  63. char *data = str;
  64. len=strlen(str);
  65. while (len--) {
  66. if (*data == '+') {
  67. *dest = ' ';
  68. }
  69. else if (*data == '%' && len >= 2 && isxdigit((int) *(data + 1))
  70. && isxdigit((int) *(data + 2))) {
  71. #ifndef CHARSET_EBCDIC
  72. *dest = (char) php_htoi(data + 1);
  73. #else
  74. *dest = os_toebcdic[(char) php_htoi(data + 1)];
  75. #endif
  76. data += 2;
  77. len -= 2;
  78. } else {
  79. *dest = *data;
  80. }
  81. data++;
  82. dest++;
  83. }
  84. *dest = '/0';
  85. return dest - str;
  86. }
  87. static int php_htoi(char *s)
  88. {
  89. int value;
  90. int c;
  91. c = ((unsigned char *)s)[0];
  92. if (isupper(c))
  93. c = tolower(c);
  94. value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;
  95. c = ((unsigned char *)s)[1];
  96. if (isupper(c))
  97. c = tolower(c);
  98. value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
  99. return (value);
  100. }
  101. static const char hexchars[];
  102. static const char HEXCHARS[];
  103. };
  104. const char CRtUrlConv::hexchars[] = "0123456789abcdef";
  105. const char CRtUrlConv::HEXCHARS[] = "0123456789ABCDEF";
  106. }

URL Encode的更多相关文章

  1. iOS/Android/Web Url Encode空格處理 原文連結:http://read01.com/3gDO.html

    iOS/Android/Web Url Encode空格處理 原文連結:http://read01.com/3gDO.html 前言 這裡只是講一個故事,一個發生在我身上的真實的故事.曾經,我以為搞加 ...

  2. get请求中的url encode问题

    首先发表一下感慨,Python的requests模块确实太简便,省却了很多的转码等等等等的问题,但这也是缺点,对于我这种基础不好的同学来说让我少知道了许多本来应该知道的东西. url encode: ...

  3. ios Url Encode

    //ios Url Encode //有时候在请求的参数里里特殊符号比如“+”等.而如果没有encode的话那么传过去的还是” ”,面实际上是%2B. -(NSString*)UrlValueEnco ...

  4. Swift URL encode

    前言 在WEB前端开发,服务器后台开发,或者是客户端开发中,对URL进行编码是一件很常见的事情,但是由于各个年代的RFC文档中的内容一直在变化,一些年代久远的代码就对URL编码和解码的规则和现在的有一 ...

  5. 为什么要做url encode

    因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符.

  6. URL encode 与 URL decode 的C语言实现

    转载自:http://blog.csdn.net/langeldep/article/details/6264058 本文代码为从PHP代码中修改而来,只保留了2个函数. int php_url_de ...

  7. C++语言的url encode 和decode

    std::string UrlEncode(const std::string& szToEncode) { std::string src = szToEncode; char hex[] ...

  8. Java与.net 关于URL Encode 的区别

    在c#中,HttpUtility.UrlEncode("www+mzwu+com")编码结果为www%2bmzwu%2bcom,在和Java开发的平台做对接的时候,对方用用url编 ...

  9. 关于URL encode和parse

    from urllib import parses = 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu& ...

随机推荐

  1. PostGIS安装

    PostGIS安装 1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/win ...

  2. 使用excel开发平台活字格搭建物流管理系统

    物流管理系统是指包含完整的物流公司信息.物流寄件信息.物流运输信息以及物流寄件单位等管理系统.功能完善的物流管理系统,能帮助物流企业更好的进行物流管理. 下面我们借助活字格,来设计一个简单的物流管理系 ...

  3. 树莓派 MPG视频硬件解码破解 Raspberry Pi Patch for MPEG-2, VC-1 license

    Enable the Pi's hardware decoding of MPEG-2 and VC-1 MPEG2 patents have expired If you have  start.e ...

  4. vue与原生混合开发

    前段时间,做了一个混合开发的项目,主要是以vue框架开发h5页面,使用cordova作为中间沟通桥梁,实现了h5与安卓.iOS的混合开发,由于从事iOS开发,h5也是刚接触不久,很多深入原理还不太清楚 ...

  5. url override and HttpSession implements session for real

    无论cookie有没有禁用,HttpSession都有效 package com.test; import javax.servlet.ServletException; import javax.s ...

  6. Expo大作战(十一)--expo中的预加载和缓存资产(Preloading & Caching Assets),expo中的图标 (Icon)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  7. 【Java入门提高篇】Day4 Java中的回调

    又忙了一周,事情差不多解决了,终于有可以继续写我的博客了(各位看官久等了). 这次我们来谈一谈Java里的一个很有意思的东西——回调. 什么叫回调,一本正经的来讲,在计算机程序设计中,回调函数是指通过 ...

  8. python的函数(三)

    1,函数多类型传值和冗余参数 2,递归函数 1,函数多类型传值和冗余参数 1.0,函数多类型传值 定义1个函数, def fun(x,y): return x+y 调用该函数print fun(1,2 ...

  9. Python3部分Print输出格式

    print("Hello World!") #直接打印字符串 print('Hello World!') #对于python,单引号也可以表示字符串 name = 'Tom' #自 ...

  10. android kl文件

    android kl(key layout)文件是一个映射文件,是标准linux与anroid的键值映射文件,kl文件可以有很多个,但是它有一个使用优先级: /system/usr/keylayout ...