C++写的UrlEncode和UrlDecode
2024-10-01 14:09:47
关于UrlEncode的实现(C++)。网上有非常多不同的版本号。对须要编码的字符集的选取并不统一。那么究竟有没有标准呢?答案是有的。參见wiki
绝对不编码的,仅仅有字母、数字、短横线(-)、下划线(_)、点(.)和波浪号(~),其它字符要视情况而定。所以一般性的urlencode仅仅需保留上述字符不进行编码。
以下给出实现:
- unsigned char ToHex(unsigned char x)
- {
- return x > 9 ? x + 55 : x + 48;
- }
- unsigned char FromHex(unsigned char x)
- {
- unsigned char y;
- if (x >= 'A' && x <= 'Z') y = x - 'A' + 10;
- else if (x >= 'a' && x <= 'z') y = x - 'a' + 10;
- else if (x >= '0' && x <= '9') y = x - '0';
- else assert(0);
- return y;
- }
- std::string UrlEncode(const std::string& str)
- {
- std::string strTemp = "";
- size_t length = str.length();
- for (size_t i = 0; i < length; i++)
- {
- if (isalnum((unsigned char)str[i]) ||
- (str[i] == '-') ||
- (str[i] == '_') ||
- (str[i] == '.') ||
- (str[i] == '~'))
- strTemp += str[i];
- else if (str[i] == ' ')
- strTemp += "+";
- else
- {
- strTemp += '%';
- strTemp += ToHex((unsigned char)str[i] >> 4);
- strTemp += ToHex((unsigned char)str[i] % 16);
- }
- }
- return strTemp;
- }
- std::string UrlDecode(const std::string& str)
- {
- std::string strTemp = "";
- size_t length = str.length();
- for (size_t i = 0; i < length; i++)
- {
- if (str[i] == '+') strTemp += ' ';
- else if (str[i] == '%')
- {
- assert(i + 2 < length);
- unsigned char high = FromHex((unsigned char)str[++i]);
- unsigned char low = FromHex((unsigned char)str[++i]);
- strTemp += high*16 + low;
- }
- else strTemp += str[i];
- }
- return strTemp;
- }
最新文章
- ZKWeb网页框架1.2正式发布
- 差分:IncDec Sequence 差分数组
- 【转载】Unity 优雅地管理资源,减少占用内存,优化游戏
- ABAP 表格控制(Table Control)和步循环
- web.xml 中的listener、 filter、servlet 加载顺序
- Android四大组件之一:Activity
- WPF实现摄像头镜像翻转
- 【转】 Android ListView与Button的显示----不错不错
- HDU 2167 Pebbles
- HDU-2647拓扑排序
- excel 常用函数
- hash随笔
- 过滤器复用代码【中文乱码、HTML转义】
- Java数组协变与范型不变性
- ModelBiner不验证某个属性
- flutter -------- ListView的使用
- MySQL分布式事物(XA事物)的使用
- FileInputStream、FileReader、FileWriter和File
- Tomcat 跨域问题的解决
- 转载:approxPolyDP函数
热门文章
- ASP.NET-HTTP管道模型
- [ReactVR] Render Custom 3D Objects Using the Model Component in React VR
- 数据结构与算法系列----最小生成树(Prim算法&;amp;Kruskal算法)
- CSS3弹性布局内容对齐(justify-content)属性使用具体解释
- node08---Express框架
- 基于FPGA的跨时钟域信号处理——专用握手信号
- m_Orchestrate learning system---十七、页面美观的关键是什么
- javascript系列-class8.BOM
- javascript系列-class5.数组
- vue中响应式props办法