char* urlencode(const void* buf, size_t size) {
_assert_(buf && size <= MEMMAXSIZ);
const unsigned char* rp = (const unsigned char*)buf;
char* zbuf = new char[size*+];
char* wp = zbuf;
for (const unsigned char* ep = rp + size; rp < ep; rp++) {
int32_t c = *rp;
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
(c >= '' && c <= '') || (c != '\0' && std::strchr("_-.~", c))) {
*(wp++) = c;
} else {
*(wp++) = '%';
int32_t num = c >> ;
if (num < ) {
*(wp++) = '' + num;
} else {
*(wp++) = 'a' + num - ;
}
num = c & 0x0f;
if (num < ) {
*(wp++) = '' + num;
} else {
*(wp++) = 'a' + num - ;
}
}
}
*wp = '\0';
return zbuf;
}

decode

char* urldecode(const char* str, size_t* sp) {
_assert_(str && sp);
size_t zsiz = std::strlen(str);
char* zbuf = new char[zsiz+];
char* wp = zbuf;
const char* ep = str + zsiz;
while (str < ep) {
int32_t c = *str;
if (c == '%') {
int32_t num = ;
if (++str >= ep) break;
c = *str;
if (c >= '' && c <= '') {
num = c - '';
} else if (c >= 'a' && c <= 'f') {
num = c - 'a' + ;
} else if (c >= 'A' && c <= 'F') {
num = c - 'A' + ;
}
if (++str >= ep) break;
c = *str;
if (c >= '' && c <= '') {
num = num * 0x10 + c - '';
} else if (c >= 'a' && c <= 'f') {
num = num * 0x10 + c - 'a' + ;
} else if (c >= 'A' && c <= 'F') {
num = num * 0x10 + c - 'A' + ;
}
*(wp++) = num;
str++;
} else if (c == '+') {
*(wp++) = ' ';
str++;
} else if (c <= ' ' || c == 0x7f) {
str++;
} else {
*(wp++) = c;
str++;
}
}
*wp = '\0';
*sp = wp - zbuf;
return zbuf;
}

URL格式编码与解码的更多相关文章

  1. URL的编码和解码

    URL的编码和解码 参考:阮一峰--关于URL编码 1 为什么要URL编码 在因特网上传送URL,只能采用ASCII字符集 也就是说URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和 ...

  2. url在线编码和解码

    在工作中,经常遇到encode之后的url.想查看里面的某个参数的时候,很不直观.今天在网上搜了一下对url在线编码和解码的网站.对我来说,使用起来很方便.而且这个网站里面,不仅仅有对url的编码和解 ...

  3. java中URL 的编码和解码函数

    java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascri ...

  4. javascript对url进行编码和解码

    这里总结下JavaScript对URL进行编码和解码的三个方法. 为什么要对URL进行编码和解码 只有[0-9[a-Z] $ - _ . + ! * ' ( ) ,]以及某些保留字,才能不经过编码直接 ...

  5. .NET Core中如何对Url进行编码和解码

    我们在.NET Core项目中,可以用WebUtility类对Url进行编码和解码,首先我们要确保项目中引入了nuget包:System.Runtime.Extensions 当然这个nuget包默认 ...

  6. 在线url网址编码、解码

    >>在线url网址编码.解码<<

  7. JS对url进行编码和解码(三种方式区别)

    Javascript语言用于编码的函数,一共有三个,最古老的一个就是escape().虽然这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它,所以有必要先从它讲起. escape 和 ...

  8. URL地址编码和解码

    0. 参考 [整理]关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode) python3中的urlopen对于中文url是如何处理的? 中文URL的编码问题 ...

  9. js 对url进行编码和解码的三种方式

    一.escape 和 unescape escape 原理:对除 ASCII字母.数字.标点符号(@ * _ + - . /) 以外的字符进行编码 .编码的字符被替换成了十六进制的转义序列 不编码的字 ...

随机推荐

  1. Android UI -- 布局介绍(布局包括FrameLayout, LinearLayout, RelativeLayout, GridLayout)

    首先介绍常用布局类 FrameLayout 最简单的布局管理器. 这个布局管理类有几个特性: 添加组件默认在左上角的. 如果添加多个组件会叠加到一起,并且都在左上角.(可以通过一gravity属性改变 ...

  2. js 中&& 与 ||

    /*** 几乎所有语言中||和&&都遵循“短路”原理,* 如&&中第一个表达式为假就不会去处理第二个表达式,而||正好相反.* js也遵循上述原则.* 当||时,找到为 ...

  3. Makefile编程

    [个人体会]0.1 项目文件要合理分隔,功能模块分开放,分别设置Makefile自动编译,                        0.2 源码和头文件分开放,一个或多个头文件对应一个源码文件. ...

  4. FreeModbus 移植于STM32 实现Modbus RTU通信

    http://ntn314.blog.163.com/blog/static/161743584201233084434579/ 毕业设计自己要做个基于STM32的PLC能直接跑语句表的,现在看来好像 ...

  5. jvm 漫谈 笔记

    1.Jvm到底是什么呢? Jvm其实就是模拟一台计算机,每种cpu都有自己的指令集,jvm自己设置一套指令集,这就是我满看的的字节码,然后jvm需要执行这些字节码,其实这些字节码最终直接对应到cpu的 ...

  6. 【暑假】[深入动态规划]UVa 12170 Easy Climb

    UVa 12170 Easy Climb 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=24844 思路:  引别人一 ...

  7. leetcode—sum root to leaf number

    题目如下: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a ...

  8. acm-DP整理

    一.背包 .各种01背包 void leastOne_Pack(int id, int num ) {//至少取一个: int i, j, c, v ; ; i <= num ; i ++ ) ...

  9. Hadoop概念学习系列之谈谈RPC(三十三)

    RPC-------->远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数 ...

  10. Android问题-selection contains a component,button7,introduced in an ancestor and cannot be deleted.

    问题现象: 在开发Android时增加的控件想删除,可是删除时提示“Android问题-selection contains a component,button7,introduced in an ...