您的位置 首页 > 数码极客

url如何编码解码器、URL解码器!

/**

* 任何人任何机构皆可用于任何项目,此软件免费无需书面授权

* 在软件和软件的所有副本中都必须包含版权声明和软件相关注解

*

* 模块: urlcode.c

* 简述: URL编码与解码

* 作者: woods zhang -> hoojar@163.com ->

* 版权: 2006-2018, 张树林 拥有此源码所有版权 (MIT许可协议)

* Copyright 2006-2018, Woods Zhang All Rights Reserved (The MIT License)

*/

#include <;

#include <;

#include <c;

#include <;

/**

* 十六进制转换为十进制

*

* @param code 要转换的十六进制字符

* @return 转码后的十进制

*/

char hexdec(char ch)

{

return (char)(isdigit(ch) ? ch - '0' : toupper(ch) - 'A' + 10);

}

/**

* 十进制转换为十六进制

*

* @param code 要转换的十进制字符

* @return 转码后的十六进制

*/

char dechex(char code)

{

static char hex[] = "0123456789ABCDEF";

return hex[code & 15];

}

/**

* 编码 URL 字符串(调用完后需要free)

*

* @param str 要编码的字符串

* @return 编码后的字符串

*/

char *urlencode(const char *str)

{

char *buf = malloc(strlen(str) * 3 + 1), *ret = buf;

while (*str)

{

if (isalnum(*str) || *str == '-' || *str == '_' || *str == '.' || *str == '~')

{

*buf++ = *str;

}

else if (*str == ' ')

{

*buf++ = '+';

}

else

{

*buf++ = '%', *buf++ = dechex(*str >> 4), *buf++ = dechex(*str & 15);

}

str++;

}

*buf = '';

return ret;

}

/**

* 解码 URL 字符串(调用完后需要free)

*

* @param str 要编码的字符串

* @return 解码后的字符串

*/

char *urldecode(const char *str)

{

char *buf = malloc(strlen(str) + 1), *ret = buf;

while (*str)

{

if (*str == '%')

{

if (str[1] && str[2])

{

*buf++ = hexdec(str[1]) << 4 | hexdec(str[2]);

str += 2;

}

}

else if (*str == '+')

{

*buf++ = ' ';

}

else

{

*buf++ = *str;

}

str++;

}

*buf = '';

return ret;

}

int main(int argc, const char *argv[])

{

char url[] = "name=name&sex=man&url=?test=ok";

char *eurl = urlencode(url);

printf("url encode: %s", eurl);

char *durl = urldecode(eurl);

printf("url decode: %s", durl);

free(eurl);

free(durl);

return 0;

}

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“url如何编码解码器,URL解码器,url编码,中文如何处理”边界阅读