您的位置:首页 > 移动开发 > IOS开发

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这个枚举使用哪个能解决加号不会被编码的问题呢,这个有待试验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: