(C++)UrlEncode的标准实现
来源:互联网 发布:软件界面开发 编辑:程序博客网 时间:2024/05/14 13:44
关于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;
- }
0 0
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现
- (C++)UrlEncode的标准实现 libcul
- c实现的urlencode
- 一个urlencode/urldecode的C实现
- c语言urlEncode实现
- URLDecode 和 URLEncode 在 C 中的实现中的 URLEncode
- URLDecode 和 URLEncode 在 C 中的实现
- C语言实现urlencode和decode
- c语言实现urlencode和decode
- C#WinForm下的UrlEncode转换问题
- 标准Gabor滤波器的C语言实现
- 滚动新闻
- java二维码生成与解析代码实现
- 黑马程序员_高新技术:2) 枚举、内省JavaBean
- Android android.os.NetworkOnMainThreadException 解决方案Demo
- hdu3080The plan of city rebuild
- (C++)UrlEncode的标准实现
- sts里安装svn插件
- Linux Top 命令解析
- Cocos2dx 小技巧(三)Label的换行
- MySQL Cluster 7.3 安装(一)------使用RPM安装MySQL Cluster 7.3
- 守护进程和后台进程
- java--有关日期的工具方法
- WCF interactive with IIS 7 Support for non-http portocals
- Cocos2dx 小技巧(四)delegate委托