C++實現UrlEncode和UrlDecode

來源:互聯網
上載者:User

  #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;

  }

  */

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.