首页 > 软件编程 > C 语言 > C++ UrlEncode和UrlDecode

C++ 写的UrlEncode和UrlDecode实例

作者:claireyuancy

这篇文章主要介绍了C++ 写的UrlEncode和UrlDecode实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

关于UrlEncode的实现(C++)。网上有非常多不同的版本号。对须要编码的字符集的选取并不统一。那么究竟有没有标准呢?答案是有的。

绝对不编码的,仅仅有字母、数字、短横线(-)、下划线(_)、点(.)和波浪号(~),其它字符要视情况而定。所以一般性的urlencode仅仅需保留上述字符不进行编码。

以下给出实现:

unsigned char ToHex(unsigned char x) return x > 9 ? x + 55 : x + 48; unsigned char FromHex(unsigned char x) unsigned char y; if (x >= 'A' && x <= 'Z') y = x - 'A' + 10; else if (x >= 'a' && x <= 'z') y = x - 'a' + 10; else if (x >= '0' && x <= '9') y = x - '0'; else assert(0); return y; std::string UrlEncode(const std::string& str) std::string strTemp = ""; size_t length = str.length(); for (size_t i = 0; i < length; i++) if (isalnum((unsigned char)str[i]) || (str[i] == '-') || (str[i] == '_') || (str[i] == '.') || (str[i] == '~')) strTemp += str[i]; else if (str[i] == ' ') strTemp += "+"; strTemp += '%'; strTemp += ToHex((unsigned char)str[i] >> 4); strTemp += ToHex((unsigned char)str[i] % 16); return strTemp; std::string UrlDecode(const std::string& str) std::string strTemp = ""; size_t length = str.length(); for (size_t i = 0; i < length; i++) if (str[i] == '+') strTemp += ' '; else if (str[i] == '%') assert(i + 2 < length); unsigned char high = FromHex((unsigned char)str[++i]); unsigned char low = FromHex((unsigned char)str[++i]); strTemp += high*16 + low; else strTemp += str[i]; return strTemp;

补充知识: C++中URL解码/编码

我就废话不多说了,大家还是直接看代码吧~

#include <iostream> #include <string> using namespace std; char dec2hexChar(short int n) { if (0 <= n && n <= 9) { return char(short('0') + n); else if (10 <= n && n <= 15) { return char(short('A') + n - 10); else { return char(0); short int hexChar2dec(char c) { if ('0' <= c && c <= '9') { return short(c - '0'); else if ('a' <= c && c <= 'f') { return (short(c - 'a') + 10); else if ('A' <= c && c <= 'F') { return (short(c - 'A') + 10); else { return -1; string escapeURL(const string& URL) string result = ""; for (unsigned int i = 0; i < URL.length(); i++) { char c = URL[i]; ('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '/' || c == '.' result += c; else { int j = (short int)c; if (j < 0) { j += 256; int i1, i0; i1 = j / 16; i0 = j - i1 * 16; result += '%'; result += dec2hexChar(i1); result += dec2hexChar(i0); return result; string deescapeURL(const string& URL) { string result = ""; for (unsigned int i = 0; i < URL.length(); i++) { char c = URL[i]; if (c != '%') { result += c; else { char c1 = URL[++i]; char c0 = URL[++i]; int num = 0; num += hexChar2dec(c1) * 16 + hexChar2dec(c0); result += char(num); return result;

以上这篇C++ 写的UrlEncode和UrlDecode实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • 详解C++中的const和constexpr
    详解C++中的const和constexpr
    2021-11-11
  • C/C++ Qt StatusBar底部状态栏应用教程
    C/C++ Qt StatusBar底部状态栏应用教程
    2021-11-11
  • C++ 路径中./、../、/代表的含义
    C++ 路径中./、../、/代表的含义
    2021-11-11
  • OpenCV reshape函数实现矩阵元素序列化
    OpenCV reshape函数实现矩阵元素序列化
    2021-11-11
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号