URL编码的姐妹篇 HTTP报文URL编码实现 .
Content-Type
指定为application/x-www-form-urlencoded
的时候
我们提交的数据编码形式是通过&
连接 比如key="<hack>"&
value="ailx10"
同时<hack>
和ailx10
会进行URL编码
key=%3C
hack%3E
&value=ailx10
%3C:<
%3E:>
0x3C
是<
的ASCII
码 %3E
是>
的ASCII
码
所以懂了吗?URL
编码就是将字符编码成ASCII
码或其他
那么URLDecode
的意思就是将ASCII
码或其他 转化成字符
这里方便理解以ASCII
码为例子 记住不仅仅是ASCII
码哦
当我们遇到%
的时候 意味着转码开始 连续2个16进制数字 比如%3C
URL
转码就是将%3C
转为char
型10进制数据60
记住这里只占1个字节哦
怎么玩呢?代码如下
解释一下HEX2DEC
数据的意义
16进制转10进制的转换表 ASCII
码10进制48是字符0
65是字符A
97是字符a
在看看HEX2DEC
数组
HEX2DEC[48] = 0
HEX2DEC[65] = A
HEX2DEC[97] = a
所以现在理解了吧 ~~~
void utils_uri_decode(const unsigned char* sSrc,char* dst) {
const unsigned char *pSrc = sSrc;
size_t src_len = strlen((const char*)sSrc);
const unsigned char *src_end = pSrc + src_len;
const unsigned char *src_last_dec = src_end - 2;
char *pStart = dst;
char *pEnd = pStart;
while (pSrc < src_last_dec) {
if (*pSrc == '%') {
char dec1, dec2, guard = -1;
if (guard != (dec1 = HEX2DEC[*(pSrc + 1)])
&& guard != (dec2 = HEX2DEC[*(pSrc + 2)])) {
*pEnd++ = (dec1 << 4) + dec2;
pSrc += 3;
continue;
}
}
*pEnd++ = *pSrc++;
}
while (pSrc < src_end) {
*pEnd++ = *pSrc++;
}
return;
}
const char HEX2DEC[256] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* 0 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 1 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 2 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 3 */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 4 */ (char)-1, 10, 11, 12, 13, 14, 15, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 5 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 6 */ (char)-1, 10, 11, 12, 13, 14, 15, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 7 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 8 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* 9 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* A */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* B */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* C */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* D */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* E */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
/* F */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1
};