以下是url中可能用到的特殊字符及在url中的经过编码后的值:
	
	特殊字符的含义
	URL编码
	
	#           用来标志特定的文档位置   %23
	
	%         对特殊字符进行编码            %25
	
	&         分隔不同的变量值对             %26
	
	+         在变量值中表示空格             %2B
	
	/          表示目录路径                          %2F
	
	\          表示目录路径                          %5C
	
	=         用来连接键和值                      %3D
	
	?         表示查询字符串的开始          %3F
	
	空格    空格                                         %20
	
	.          句号                                          %2E
	
	:         冒号                                           %3A
	
	但上面并不是一个特殊的映射集,%编码是有特点的规则的:

url编码,只是将串的内存数据按字节用16进制表示,

在这里插入图片描述

由上可知,数字,字母,’.’ 是不进行url编码的。

下为源码,接好(如有不当,联系我)

#include<string>
#include<iostream>
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
		throw "except occurred";
}

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
		throw "except";
}

string escapeURL(const string &URL)
{
	string result = "";
	for (unsigned int i = 0; i<URL.size(); i++) {
		char c = URL[i];
		if (
			(\'0\' <= c && c <= \'9\') ||
			(\'a\' <= c && c <= \'z\') ||
			(\'A\' <= c && c <= \'Z\') ||
			 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.size(); 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;
}

int main()
{
	string str = "岁月123abc.#";
	string temp = escapeURL(str);
	std::cout<<temp << endl;
	std::cout << deescapeURL(temp) << endl;
	getchar();
	return 0;
}


版权声明:本文为匿名原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: