c语言实现url编码源码,URL encode 与 URL decode 的C语言实现
本文代码为从PHP代码中修改而来,只保留了2个函数。
int php_url_decode(char *str, int len);
char *php_url_encode(char const *s, int len, int *new_length);
URL编码做了如下操作:
字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不被编码,维持原值;
空格" "被转换为加号"+"。
其他每个字节都被表示成"%xy"格式的由3个字符组成的字符串,编码为UTF-8。
#include
#include
#include
#include
#include
static unsigned char hexchars[] = "0123456789ABCDEF";
static int php_htoi(char *s)
{
int value;
int c;
c = ((unsigned char *)s)[0];
if (isupper(c))
c = tolower(c);
value = (c >= ‘0‘ && c <= ‘9‘ ? c - ‘0‘ : c - ‘a‘ + 10) * 16;
c = ((unsigned char *)s)[1];
if (isupper(c))
c = tolower(c);
value += c >= ‘0‘ && c <= ‘9‘ ? c - ‘0‘ : c - ‘a‘ + 10;
return (value);
}
char *php_url_encode(char const *s, int len, int *new_length)
{
register unsigned char c;
unsigned char *to, *start;
unsigned char const *from, *end;
from = (unsigned char *)s;
end = (unsigned char *)s + len;
start = to = (unsigned char *) calloc(1, 3*len+1);
while (from < end)
{
c = *from++;
if (c == ‘ ‘)
{
*to++ = ‘+‘;
}
else if ((c < ‘0‘ && c != ‘-‘ && c != ‘.‘) ||
(c < ‘A‘ && c > ‘9‘) ||
(c > ‘Z‘ && c < ‘a‘ && c != ‘_‘) ||
(c > ‘z‘))
{
to[0] = ‘%‘;
to[1] = hexchars[c >> 4];
to[2] = hexchars[c & 15];
to += 3;
}
else
{
*to++ = c;
}
}
*to = 0;
if (new_length)
{
*new_length = to - start;
}
return (char *) start;
}
int php_url_decode(char *str, int len)
{
char *dest = str;
char *data = str;
while (len--)
{
if (*data == ‘+‘)
{
*dest = ‘ ‘;
}
else if (*data == ‘%‘ && len >= 2 && isxdigit((int) *(data + 1)) && isxdigit((int) *(data + 2)))
{
*dest = (char) php_htoi(data + 1);
data += 2;
len -= 2;
}
else
{
*dest = *data;
}
data++;
dest++;
}
*dest = ‘\0‘;
return dest - str;
}
int main(int argc, char ** argv)
{
char *str = "你好,世界!",*new_str;
int len = 0,new_len = 0,old_len = 0;
len = strlen(str);
new_str = php_url_encode(str,len,&new_len);
printf("new string : %s,new length : %d\n",new_str,new_len);
old_len = php_url_decode(new_str,new_len);
printf("old string : %s,old length : %d\n",new_str,old_len);
return 0;
}
ps:查了好多资料才弄明白urldecode的原理,原来如此简单,呵呵
时间: 09-06
c语言实现url编码源码,URL encode 与 URL decode 的C语言实现相关推荐
- 从Internet上抓取指定URL的源码的方案
从Internet上抓取指定URL的源码的方案 作者: 引言: 在做无线项目的时候,与通讯公司的数据通讯有一部分是通过XML交互的,所以必须要动态抓取通讯公司提供的固定的Internet上的数据,便研 ...
- 基于 FFMPEG 的视频编码 源码(libavcodec,C++ Qt)
基于 FFMPEG 的视频编码 源码(libavcodec,C++ Qt) 昨晚把源代码好好整理了一下,加入了视频时间限制功能.源码放这里,大家随便用. 关于代码的解释可以看我另一篇博客: 基于 FF ...
- 易语言QQpost加好友源码
易语言QQpost加好友源码 以下是部分代码 .版本 2 .支持库 specGetQq (主动添加QQ) QQ空间页面 = 编码_Utf8到Ansi (网页_访问_对象 ("https:// ...
- 易语言窗口c_句柄取进程名,易语言窗口句柄取进程文件名源码
窗口句柄取进程文件名系统结构:句柄取进程文件名,CreateToolhelp32Snapshot,GetWindowThreadProcessId,CloseHandle,Module32First, ...
- 计算机毕业设计Java-ssmC语言教学辅导网站源码+系统+数据库+lw文档
计算机毕业设计Java-ssmC语言教学辅导网站源码+系统+数据库+lw文档 计算机毕业设计Java-ssmC语言教学辅导网站源码+系统+数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开发语 ...
- C语言实现Base64编码转码
C语言实现Base64编码转码 关于Base64的介绍有两篇文章已经做得非常好了:一篇是维基百科Base64的词条,如果被Q可以看本文
- mysql数据库+易语言的应用_易语言mysql数据应用源码
易语言mysql数据应用源码 易语言mysql数据应用源码 系统结构:注册账号,连接Mysql,用户注册验证码,修改密码验证码,忘记密码验证码,修改密码,忘记密码, ======窗口程序集1 | | ...
- 易语言json置入_易语言json操作模块源码
易语言json操作模块源码 系统结构:初始化,解析,到文本,置属性,置属性对象,置属性数值,取属性数值,取属性对象,取通用属性,取属性,成员数,加成员,取成员,取成员文本,置成员,删成员,置类型,赋值 ...
- c语言案例分析105,C语言实战105例源码
C语言实战105例源码 以下程序大家如有兴趣可在文件夹下载即可 第1部分 基础篇 实例1 一个价值"三天"的BUG 2 实例2 灵活使用递增(递减)操作符 5 实例3 算术运算符计 ...
最新文章
- js跨域访问,No 'Access-Control-Allow-Origin' header is present on the requested resource
- python创建学生类和教师类_创建StudentServices类
- 一文搞懂负载均衡中的一致性哈希算法
- 手写体识别(数据挖掘入门与实践-实验11)
- Python | 程序以字符串长度打印单词
- hping3工具DOS攻击实验
- 用c语言编程参赛信息查询,确定参赛者名单(C语言实现)
- 你的项目是否真的需要 DevOps?
- Elasticsearch template(待续...)
- SQL必知必会-创建表和操纵表
- c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数
- 【算法】二叉树遍历算法总结:前序中序后序遍历
- 基于stm32风力摆控制系统(电赛获得省一)
- Photoshop 更改图片颜色
- Javascript 实现的 CXK 打篮球游戏
- 进程调度案例分析:为何不能调度?
- android浏览器有桌面模式么,手机浏览器添加到主屏幕(桌面)的图标设置以及WebApp模式...
- 内容推荐场景下多模态语义召回的若干实践
- MySQL连接查询——连接查询的综合应用
- 为什么要限制兑换外汇额度?
热门文章
- 七牛云发送短信验证码
- Excel2016办公扫盲
- 计算机硬件和软件英语,计算机组成与设计:硬件/软件接口(英文版 原书第5版 ARM版)...
- 个推透传消息设置通知栏展示 ios_企微功能十问 | 企业微信如何开启聊天侧边栏功能,有什么用?...
- 音视频开发系列(24)使用FFmpeg添加、删除、替换和提取视频中的音频
- ABBYY FineReader OCR图文识别软件如何快速将纸质文档转为电子档教程
- jtag的emu0与emu1_谁特么告诉你EMU就是1分钱就能赚75美元?
- Java实现字母去重
- excel批量提取网页标题
- cinnamon桌面_使用Cinnamon增强您的Linux桌面