bool DecodeUrl(char *Src, char *url, int MaxLen)
{
if(NULL == url || NULL == Src)
{
return false;
}
if(MaxLen == 0)
{
return false;
}
char *p = Src; // 用来循环
int i = 0; // i用来控制url数组
/* 临时保存url编码的数据
例如: %1A%2B%3C
*/
char t = '\0';
while(*p != '\0' && MaxLen--)
{
if(*p == 0x25) // 0x25 = '%'
{
/* 以下是十六进制数中常出现的大写字母,小写字母,数字的判断 */
if(p[1] >= 'A' && p[1] <= 'Z') // 大写字母
{
t = p[1] - 'A' + 10; // A = 10,下同
}
else if(p[1] >= 'a' && p[1] <= 'z') // 小写字母
{
t = p[1] - 'a' + 10;
}
else if(p[1] >= '0' && p[1] <= '9') // 数字
{
t = p[1] - '0';
}
t *= 16; // 将数放到十位上去
if(p[2] >= 'A' && p[2] <= 'Z') // 大写字母
{
t += p[2] - 'A' + 10;
}
else if(p[2] >= 'a' && p[2] <= 'z') // 小写字母
{
t += p[2] - 'a' + 10;
}
else if(p[2] >= '0' && p[2] <= '9') // 数字
{
t += p[2] - '0';
}
// 到此合成了一个十六进制数
url[i] = t;
p += 3, i++;
}
else
{
// 没有被url编码的数据
// '+'特殊处理.它相当于一个空格
if(*p != '+')
{
url[i] = *p;
}
else
{
url[i] = 0x20;
}
i++;
p++;
}
}
url[i] = '\0'; // 结束符
return true;
}
[原]VC++ URL编码的解码
最新推荐文章于 2023-08-01 11:56:59 发布