唉,这段时间有点忙啊,这个东西都落下了,也不知道什么时候能完,现在链接部分已经实现了,大部分代码都是从网上搬来的,不是不要重复造轮子么...

关于url编码的部分

 
  1. /* 
  2.  * ===================================================================================== 
  3.  *       Filename:  url_encode.cpp 
  4.  *    Description:  url encode 
  5.  * 
  6.  *        Created:  07/04/2012 08:32:24 PM 
  7.  * 
  8.  *         Author:  zhy (), izualzhy@163.com 
  9.  * ===================================================================================== 
  10.  */ 
  11. #ifndef __URL_ENCODE__ 
  12. #define __URL_ENCODE__ 
  13. #define NON_NUM '0' 
  14. /** 
  15.  * @brief URLEncode 对字符串URL编码 
  16.  * 
  17.  * @param str 原字符串 
  18.  * @param strSize 原字符串长度(不包括最后的\0) 
  19.  * @param result 结果缓冲区的地址 
  20.  * @param resultSize 结果缓冲区的大小(包括最后的\0) 
  21.  * 
  22.  * @return: >0:resultstring 里实际有效的长度 
  23.  *            0: 解码失败. 
  24.  */ 
  25. int URLEncode(const char* str, const int strSize, char* result, const int resultSize); 
  26.  
  27. int hex2num(char c); 
  28.  
  29. /** 
  30.  * @brief URLDecode 对字符串URL解码,编码的逆过程 
  31.  * 
  32.  * @param str 原字符串 
  33.  * @param strSize 原字符串大小(不包括最后的\0) 
  34.  * @param result 结果字符串缓存区 
  35.  * @param resultSize 结果地址的缓冲区大小(包括最后的\0) 
  36.  * 
  37.  * @return: >0 result 里实际有效的字符串长度 
  38.  *            0 解码失败 
  39.  */ 
  40. int URLDecode(const char* str, const int strSize, char* result, const int resultSize); 
  41. #endif 

 

 
  1. /* 
  2.  * ===================================================================================== 
  3.  *       Filename:  url_encode.cpp 
  4.  *    Description:  url encode 
  5.  * 
  6.  *        Created:  07/04/2012 08:32:24 PM 
  7.  * 
  8.  *         Author:  zhy (), izualzhy@163.com 
  9.  * ===================================================================================== 
  10.  */ 
  11. #include <stdio.h> 
  12. #include <string.h> 
  13. #include "url_encode.h" 
  14. /** 
  15.  * @brief URLEncode 对字符串URL编码 
  16.  * 
  17.  * @param str 原字符串 
  18.  * @param strSize 原字符串长度(不包括最后的\0) 
  19.  * @param result 结果缓冲区的地址 
  20.  * @param resultSize 结果缓冲区的大小(包括最后的\0) 
  21.  * 
  22.  * @return: >0:resultstring 里实际有效的长度 
  23.  *            0: 解码失败. 
  24.  */ 
  25. int URLEncode(const char* str, const int strSize, char* result, const int resultSize) 
  26.     int i; 
  27.     int j = 0;//for result index 
  28.     char ch; 
  29.  
  30.     if ((str==NULL) || (result==NULL) || (strSize<=0) || (resultSize<=0)) { 
  31.         return 0; 
  32.     } 
  33.  
  34.     for ( i=0; (i<strSize)&&(j<resultSize); ++i) { 
  35.         ch = str[i]; 
  36.         if (((ch>='A') && (ch<'Z')) || 
  37.             ((ch>='a') && (ch<'z')) || 
  38.             ((ch>='0') && (ch<'9'))) { 
  39.             result[j++] = ch; 
  40.         } else if (ch == ' ') { 
  41.             result[j++] = '+'
  42.         } else if (ch == '.' || ch == '-' || ch == '_' || ch == '*') { 
  43.             result[j++] = ch; 
  44.         } else { 
  45.             if (j+3 < resultSize) { 
  46.                 sprintf(result+j, "%%%02X", (unsigned char)ch); 
  47.                 j += 3; 
  48.             } else { 
  49.                 return 0; 
  50.             } 
  51.         } 
  52.     } 
  53.  
  54.     result[j] = '\0'
  55.     return j; 
  56. /* 
  57.  * ===================================================================================== 
  58.  *       Filename:  url_decode.cpp 
  59.  *    Description:  url decode 
  60.  * 
  61.  *        Created:  07/06/2012 07:35:14 PM 
  62.  *         Author:  zhy (), izualzhy@163.com 
  63.  * ===================================================================================== 
  64.  */ 
  65.  
  66.  
  67. int hex2num(char c) 
  68.     if (c>='0' && c<='9'return c - '0'
  69.     if (c>='a' && c<='z'return c - 'a' + 10;//这里+10的原因是:比如16进制的a值为10 
  70.     if (c>='A' && c<='Z'return c - 'A' + 10; 
  71.      
  72.     printf("unexpected char: %c", c); 
  73.     return NON_NUM; 
  74.  
  75. /** 
  76.  * @brief URLDecode 对字符串URL解码,编码的逆过程 
  77.  * 
  78.  * @param str 原字符串 
  79.  * @param strSize 原字符串大小(不包括最后的\0) 
  80.  * @param result 结果字符串缓存区 
  81.  * @param resultSize 结果地址的缓冲区大小(包括最后的\0) 
  82.  * 
  83.  * @return: >0 result 里实际有效的字符串长度 
  84.  *            0 解码失败 
  85.  */ 
  86. int URLDecode(const char* str, const int strSize, char* result, const int resultSize) 
  87.     char ch,ch1,ch2; 
  88.     int i; 
  89.     int j = 0;//record result index 
  90.  
  91.     if ((str==NULL) || (result==NULL) || (strSize<=0) || (resultSize<=0)) { 
  92.         return 0; 
  93.     } 
  94.  
  95.     for ( i=0; (i<strSize) && (j<resultSize); ++i) { 
  96.         ch = str[i]; 
  97.         switch (ch) { 
  98.             case '+'
  99.                 result[j++] = ' '
  100.                 break
  101.             case '%'
  102.                 if (i+2<strSize) { 
  103.                     ch1 = hex2num(str[i+1]);//高4位 
  104.                     ch2 = hex2num(str[i+2]);//低4位 
  105.                     if ((ch1!=NON_NUM) && (ch2!=NON_NUM)) 
  106.                         result[j++] = (char)((ch1<<4) | ch2); 
  107.                     i += 2; 
  108.                     break
  109.                 } else { 
  110.                     break
  111.                 } 
  112.             default
  113.                 result[j++] = ch; 
  114.                 break
  115.         } 
  116.     } 
  117.      
  118.     result[j] = 0; 
  119.     return j; 

上面的代码的版权还是原作者的,所以就保留作者的信息了,编写程序的时候这是用了URLEncode函数