用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. 【读书笔记】iOS-网络-Web Service协议与风格

    协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...

  2. 在Ubuntu 14.04 LTS系统中设置Apache虚拟主机(一IP多访问)

    参考资料:http://os.51cto.com/art/201406/441909.htm

  3. 上传文件Base64格式(React)

    记录一下上传文件时将文件数据转为Base64的方法 通过 FileReader对象创建一个实例,然后使用 readAsDataURL方法将数据转为Base64格式 注意: 读取过程是异步的 绑定onl ...

  4. 排错-windows下 ORA-12560 TNS 协议适配器错误解决方法

    排错-windows下_ORA-12560 TNS 协议适配器错误解决方法 by:授客 QQ:1033553122 问题描述: 修改SQL*Plus窗口属性后,重新打开SQL*Plus时出现ORA-1 ...

  5. Unity Frame Debugger连接Android真机调试

    当用Profiler分析到不是代码导致的性能问题,当前场景最大的性能瓶颈是渲染时,或者自己写的Shader要调试时,都可以用Frame Debugger进行调试. 按下列步骤设置打包,既可以用Prof ...

  6. matlab练习程序(单层感知器)

    clear all; close all; clc; %生成两组已标记数据 randn(); mu1=[ ]; S1=[ ; ; 0.4]; P1=mvnrnd(mu1,S1,); mu2=[ ]; ...

  7. 文科妹学 GitHub 简易教程

      #什么是 Github ?必须要放这张图了!!!<img src="https://pic4.zhimg.com/7c9d3403bf922b1663f56975869c829b_ ...

  8. Angular 过滤器的简单使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 小慢歌之基于RHEL8/CentOS8的网络IP配置详解

    ➡ 在rhel8(含centos8)上,没有传统的network.service,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,那么该如何进行网络配置呢. ➡ ...

  10. JSR规范

    JSR是JavaSpecification Requests的缩写,意思是Java 规范提案.是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求.任何人都 ...