博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】C/C++ URL编码,解码(提取自PHP)
阅读量:6287 次
发布时间:2019-06-22

本文共 3349 字,大约阅读时间需要 11 分钟。

hot3.png

//解码//头文件自己加上的#include 
#include 
#include 
#include 
#include 
using namespace std;/* {
{
{ php_htoi */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);}/* }}} *//* {
{
{ URL解码,提取自PHP 5.2.17   用法:string urldecode(string str_source)   时间:2012-8-14 By Dewei*/string urldecode(string &str_source){ char const *in_str = str_source.c_str(); int in_str_len = strlen(in_str); int out_str_len = 0; string out_str; char *str; str = _strdup(in_str); char *dest = str; char *data = str; while (in_str_len--) { if (*data == '+') { *dest = ' '; } else if (*data == '%' && in_str_len >= 2 && isxdigit((int) *(data + 1))  && isxdigit((int) *(data + 2))) { *dest = (char) php_htoi(data + 1); data += 2; in_str_len -= 2; } else { *dest = *data; } data++; dest++; } *dest = '\0'; out_str_len =  dest - str; out_str = str; free(str);    return out_str;}/* }}} *///也是自己加的int main(){    string s = "%7B%22result%22%3A1%2C%22msg%22%3A%22login+fialed%22%7D";    std::cout<< urldecode(s);    return 0;}
//编码--这个就直接挪过来了,想必也一样好用/* {
{
{ URL编码,提取自PHP    用法:string urlencode(string str_source)   说明:仅不编码 -_. 其余全部编码,空格会被编码为 +   时间:2012-8-13 By Dewei*/string urlencode(string &str_source){ char const *in_str = str_source.c_str(); int in_str_len = strlen(in_str); int out_str_len = 0; string out_str; register unsigned char c; unsigned char *to, *start; unsigned char const *from, *end; unsigned char hexchars[] = "0123456789ABCDEF"; from = (unsigned char *)in_str; end = (unsigned char *)in_str + in_str_len; start = to = (unsigned char *) malloc(3*in_str_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; out_str_len = to - start; out_str = (char *) start; free(start); return out_str;}/* }}} *//* {
{
{ URL编码CString版,提取自PHP 5.2.17   用法:CString urlencode(CString str_source)   说明:仅不编码 -_. 其余全部编码,空格会被编码为 +   时间:2012-8-13 By Dewei*/CString urlencode(CString &str_source){ char const *in_str = str_source; int in_str_len = strlen(in_str); int out_str_len = 0; CString out_str = '\0'; register unsigned char c; unsigned char *to, *start; unsigned char const *from, *end; unsigned char hexchars[] = "0123456789ABCDEF"; from = (unsigned char *)in_str; end = (unsigned char *)in_str + in_str_len; start = to = (unsigned char *) malloc(3*in_str_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; out_str_len = to - start; out_str = (char *) start; free(start); return out_str;}

转载于:https://my.oschina.net/kakablue/blog/294620

你可能感兴趣的文章
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
Spring配置文件(2)配置方式
查看>>
MariaDB/Mysql 批量插入 批量更新
查看>>