在近期的项目开发中遇到一个问题,在数据进行加密后,有些字符串加密后会含有“+”号,在服务器端接收到为空格;
在网上查了很多资料,大体方案有以下几种:
1、修改客户端
将参数中的“+”全部替换为“%2B”;
但是我这边测试后服务器收到的就是“%2B”,惆怅~~~
2、服务器端将空格替换为“+”,但是这种方式只适用于参数中有“+”没有空格的情况,不敢尝试;
或者服务器端将“%2B”全部替换为“+”,同样不想选择这种方式;
3、使用stringByAddingPercentEncodingWithAllowedCharacters方法对特殊字符转义
NSString*charactersToEscape =@"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";
NSCharacterSet*allowedCharacters = [[NSCharacterSetcharacterSetWithCharactersInString:charactersToEscape]invertedSet];
NSString*encodedUrl = [urlstringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
使用后发现“+”还是变成了“%2B”,囧~~
4、最终的处理方式是将字符串转换成16进制,服务器端再转换回去即可,成功解决问题😁😁😁