iOS端加密传输对空格和加号的处理

释放双眼,带上耳机,听听看~!

一、“+”变空格的问题

在项目开发中,如果碰到“+”出现进行加密传输到服务器时,会出现+空格的问题,而在服务器端真正的加号会被转化为%2B

二、解决思路

假设现在对 NSString *encodString = @"测试 +你好";进行加密。

1、我们可以先对“空格”不进行处理。
2、使用stringByAddingPercentEncodingWithAllowedCharacters方法,对自定义的
"?!@#$^&%*+,:;='"`<>()[]{}/\|n"

加密字符进行加密,这时是对用户真正输入的+进行加密,代码如下:

NSString * encodedStringResult = [encodString stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:@"?!@#$^&%*+,:;='"`<>()[]{}/\|n"] invertedSet]];
3、再将加密之后的encodedStringResult进行空格符转化为+即可
encodedStringResult = [encodedStringResult stringByReplacingOccurrencesOfString:@" " withString:@"+"];

完整代码:

NSString *encodString = @"测试 +你好";
//先将+处理成%2B,对空格不进行处理
NSString * encodedStringResult = [encodString stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:@"?!@#$^&%*+,:;='"`<>()[]{}/\|n"] invertedSet]];
//再将空格处理成+
encodedStringResult = [encodedStringResult stringByReplacingOccurrencesOfString:@" " withString:@"+"];

注意,在此问题解决方法中千万不要使用CFURLCreateStringByAddingPercentEscapes进行加密操作,因为CFURLCreateStringByAddingPercentEscapes内部直接将空格转化为了%20,并且这个方法在iOS9之后已经废弃使用了!!!

人已赞赏
iOS文章

CocoaPods 的安装(更新)、使用、删除

2020-1-18 8:46:24

iOS文章

nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1003

2020-1-18 9:45:51

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索