程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> C++實現UrlEncode和UrlDecode

C++實現UrlEncode和UrlDecode

編輯:更多關於編程

      #include "stdafx.h"

      #include

      #include

      #include

      using namespace std;

      std::string UrlEncode(const std::string& szToEncode)

      {

      std::string src = szToEncode;

      char hex[] = "0123456789ABCDEF";

      string dst;

      for (size_t i = 0; i < src.size(); ++i)

      {

      unsigned char cc = src[i];

      if (isascii(cc))

      {

      if (cc == ' ')

      {

      dst += "%20";

      }

      else

      dst += cc;

      }

      else

      {

      unsigned char c = static_cast(src[i]);

      dst += '%';

      dst += hex[c / 16];

      dst += hex[c % 16];

      }

      }

      return dst;

      }

      std::string UrlDecode(const std::string& szToDecode)

      {

      std::string result;

      int hex = 0;

      for (size_t i = 0; i < szToDecode.length(); ++i)

      {

      switch (szToDecode[i])

      {

      case '+':

      result += ' ';

      break;

      case '%':

      if (isxdigit(szToDecode[i + 1]) && isxdigit(szToDecode[i + 2]))

      {

      std::string hexStr = szToDecode.substr(i + 1, 2);

      hex = strtol(hexStr.c_str(), 0, 16);

      //字母和數字[0-9a-zA-Z]、一些特殊符號[$-_.+!*'(),] 、以及某些保留字[$&+,/:;=?@]

      //可以不經過編碼直接用於URL

      if (!((hex >= 48 && hex <= 57) || //0-9

      (hex >=97 && hex <= 122) || //a-z

      (hex >=65 && hex <= 90) || //A-Z

      //一些特殊符號及保留字[$-_.+!*'(),] [$&+,/:;=?@]

      hex == 0x21 || hex == 0x24 || hex == 0x26 || hex == 0x27 || hex == 0x28 || hex == 0x29

      || hex == 0x2a || hex == 0x2b|| hex == 0x2c || hex == 0x2d || hex == 0x2e || hex == 0x2f

      || hex == 0x3A || hex == 0x3B|| hex == 0x3D || hex == 0x3f || hex == 0x40 || hex == 0x5f

      ))

      {

      result += char(hex);

      i += 2;

      }

      else result += '%';

      }else {

      result += '%';

      }

      break;

      default:

      result += szToDecode[i];

      break;

      }

      }

      return result;

      }

      /*

      int main()

      {

      string test_str1 = "爽爽";

      string test_str2 = UrlEncode(test_str1);

      cout << test_str2 << endl;

      }

      */

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved