iOS URLencode加号变空格
2016-03-05 18:58
417 查看
iOS项目中访问HTTP时需要对URL进行编码,我之前一直使用stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)进行编码,但目前这个方法会有黄色叹号,提示这个方法已经废弃,请使用stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet)这个方法替换,但是我在iOS7的设备上使用这个方法,有几率崩溃,而且是当我的参数字符长度超过一定范围时就会崩溃,但使用stringByAddingPercentEscapesUsingEncoding就不会有这个问题,于是我判断了一下系统版本。
但这样依旧会有一个问题,就是当参数中有英文的加号“+”,这个字符就不会被编码,这样在服务器解码时就有可能把这个加号“+”误认为一个空格,当然还有一些其他的字符不会被编码,原因是这些字符在URL中有特殊的含义,“%?&”这些,所以我又找到了另外一个方法:
NSString *enString =(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)param, NULL, NULL, kCFStringEncodingUTF8);
var enString = CFURLCreateStringByAddingPercentEscapes(nil, param, nil, "!*'();:@&=+$,/?%#[]", CFStringBuiltInEncodings.UTF8.rawValue) as String; // swift
需要注意的是如果是get请求,你要做的是只对参数进行上面方法的编码,因为这些被编码的字符在URL里有含义。
这样算是暂时解决了问题,但是我觉得苹果推荐使用的方法,可能是我使用的方式不对,NSCharacterSet这个枚举使用哪个能解决加号不会被编码的问题呢,这个有待试验。
但这样依旧会有一个问题,就是当参数中有英文的加号“+”,这个字符就不会被编码,这样在服务器解码时就有可能把这个加号“+”误认为一个空格,当然还有一些其他的字符不会被编码,原因是这些字符在URL中有特殊的含义,“%?&”这些,所以我又找到了另外一个方法:
NSString *enString =(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)param, NULL, NULL, kCFStringEncodingUTF8);
var enString = CFURLCreateStringByAddingPercentEscapes(nil, param, nil, "!*'();:@&=+$,/?%#[]", CFStringBuiltInEncodings.UTF8.rawValue) as String; // swift
需要注意的是如果是get请求,你要做的是只对参数进行上面方法的编码,因为这些被编码的字符在URL里有含义。
这样算是暂时解决了问题,但是我觉得苹果推荐使用的方法,可能是我使用的方式不对,NSCharacterSet这个枚举使用哪个能解决加号不会被编码的问题呢,这个有待试验。
相关文章推荐
- iOS第三方库的一些总结
- iOS 开发--NSMutableArray使用枚举方法
- iOS自定义导航栏titleView
- iOS 获取当前IP地址
- IOS 之copy(浅拷贝)和mutableCopy(深拷贝) 以及strong 和weak理解
- IOS开发中的几种设计模式
- iOS开发之字符串搜索包含
- ios事件处理-
- iOS绘图与滤镜
- iOS多控制器-视图切换.
- IOS:storyBoard中怎么单独使用TabBar这个控件
- iOS动画
- iOS开发—跳转方式实现地图导航功能
- iOS 单例
- 理解OAuth 2.0
- iOS - 功能模块 - 幻灯片切换
- iOS 获取视频的任意一帧
- iOS 第三方库 - iCarousel
- iOS 设计模式 - 责任链模式
- iOS 设计模式 - 模板模式