URL编码

	以下是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;
}


===================

然后值得注意的是:
linux本地使用的字符集一般是utf-8
在这里插入图片描述
而windows一般是unicode
所以就算是使用url编码网页的URI或者post的数据的时候,由于两边系统使用的字符编码的不对称,会导致url解码失败,所以还需要字符编码类型的转化,最好都统一utf-8, web用的比较普遍.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值