使用CFURLCreateStringByAddingPercentEscapes进行URL编码
iOS程序访问HTTP资源时需要对URL进行UTF8编码,特酷吧在之前一直都喜欢使用NSString的stringByAddingPercentEscapesUsingEncoding方法进行编码。今天在使用Analyze分析工程时,提示下面的方法可能存在内存泄露:
NSString *enString =(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)stringURL, NULL, NULL, kCFStringEncodingUTF8);
注意到这个方法也是一个编码方案,就查询了两种方式的区别,有些收获。
stringByAddingPercentEscapesUsingEncoding方法有一个问题:不会转转URL中的"%&?"等符号[这个很好理解,因为不好区分这些特殊字符到底是连接符号还是参数值]。这些字符在URL语法中有特殊的含义,如果在URL的参数中有这些字符,就需要转化为"%+ASCII"的形式。如果参数中存在这些字符,而我们又使用了stringByAddingPercentEscapesUsingEncoding方法,则服务器会将参数中的没有转义的&当做分隔符,造成分析错误。因为我的工程中几乎没有在参数中存在%&等符号的情况,所以一直用也没问题。但咱们还是要使用正规的方式。
一般来说都是用:
- CFStringRef CFURLCreateStringByAddingPercentEscapes(
- CFAllocatorRef allocator,
- CFStringRef originalString, /*待转码的类型*/
- CFStringRef charactersToLeaveUnescaped, /*指示不转义的字符*/
- CFStringRef legalURLCharactersToBeEscaped,/*指示确定转义的字符*/
- CFStringEncoding encoding); /*编码类型*/
方案就是单独编码参数值(如果编码整个URL的话会讲URL分割符&等也编码),最后拼接成完整的字符串。
示例Demo如下:
- CFStringRef escaped = CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
- NSString *out = [NSString stringWithString:(NSString *)escaped];
- CFRelease(escaped);//记得释放
另外一个小知识点:
在之前做图片切割时经常用到如下代码
- CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
- UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
实际上这个代码会造成内存泄露,正确的方式是还需要释放newImageRef,如下:
- CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
- UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
- CGImageRelease(newImageRef);
<br /
使用CFURLCreateStringByAddingPercentEscapes进行URL编码相关推荐
- iOS端URL编码和解码过程
一.URL含义 1.URL定义 URL 是Uniform Resource Locator 的缩写,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址 ...
- iOS常用方法——URL编码和URL解码
URL编码是一种常见的编码方式,作用不多说,直接上代码. URL编码: - (NSString *)URLEncodedString {// CharactersToBeEscaped = @&quo ...
- OC URL编码和URL解码
URL编码是一种常见的编码方式,作用不多说,直接上代码. URL编码: - (NSString *)URLEncodedString {// CharactersToBeEscaped = @&quo ...
- JS 中 URL 编码的问题.
URL 编码 为什么要对 URL 编码 1. 避免解析错误 我们的 queryString 的形式是使用 ?开始, key=value 传递参数, key-value pairs 之间使用 & ...
- PHP--------解决网址URL编码问题
2019独角兽企业重金招聘Python工程师标准>>> 在PHP中有urlencode().urldecode().rawurlencode().rawurldecode()这些函数 ...
- URL编码以及GET和POST提交乱码解决方案
2019独角兽企业重金招聘Python工程师标准>>> 1. 什么是URL编码. URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value ...
- java url加密解密,java URL 编码解码,该如何解决
java URL 编码解码 我写了两个接口 一个是对字符串加密 的,一个是解密的 .加密的可以通过调用接口生成加密字符串如下: Oc0PEwKrLzHqT25hYLhWP5wlk5HROPJoWC3 ...
- Google App Engine for Java下的URL编码转换问题
URL编码问题 此部分参考英文资料: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm http://www.w3school ...
- URL编码将“&”(&符号)视为“&”HTML实体
本文翻译自:URL encode sees "&" (ampersand) as "&" HTML entity I am encoding a ...
最新文章
- 胡想——对机器人控制体系的一些想法
- iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)
- 超干货 | 泰勒图(Taylor diagram)绘制方法大汇总
- mysql 查询设置调优_MySQl 查询性能优化相关
- web农行支付php示例,ecshop,shopex完美实现农业银行(农行)在线支付接口
- 自定义的plot函数参数date坐标模型[x,y]的使用建议
- PAT乙级(1036 跟奥巴马一起编程)
- 【干货】JS 限制input文本框输入
- 3.redis集群部署3主3从
- python math库基本函数
- stbc 多发送天线 matlab,系统天线论文,关于基于STBC的MIMO-OFDM系统误码性能仿真相关参考文献资料-免费论文范文...
- 今天不学习,明天变垃圾
- SMART硬盘检测参数详解
- 深入理解朴素贝叶斯(Naive Bayes)
- [Angular] ng-alain的一些实践
- 全网疯传!微信发原图暴露个人信息?微信高冷回应!真相来了...
- 浅谈mysql的执行计划是何方神圣
- Mac多版本jdk的切换
- 英语不好可以学python_想学Python这个,英语基础不好,可以学会吗?
- OVS 内核CT实现