iOS端加密传输对空格和加号的处理
2019-08-27 本文已影响0人
iOS小乔
一、“+”变空格的问题
在项目开发中,如果碰到“+”出现进行加密传输到服务器时,会出现+
变空格
的问题,而在服务器端真正的加号会被转化为%2B
。
二、解决思路
假设现在对 NSString *encodString = @"测试 +你好";
进行加密。
1、我们可以先对“空格”不进行处理。
2、使用stringByAddingPercentEncodingWithAllowedCharacters
方法,对自定义的
"~?!@#$^&%+,:;='\"`<>()[]{}/\\|\n\r?!@#$^&%*+,:;='\"`<>()[]{}/\\|\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\r"] invertedSet]];
//再将空格处理成+
encodedStringResult = [encodedStringResult stringByReplacingOccurrencesOfString:@" " withString:@"+"];
注意,在此问题解决方法中千万不要使用CFURLCreateStringByAddingPercentEscapes
进行加密操作,因为CFURLCreateStringByAddingPercentEscapes
内部直接将空格转化为了%20
,并且这个方法在iOS9之后已经废弃使用了!!!