iOS UrlEnCode加密需要注意

2019-12-30  本文已影响0人  为了自由的白菜

今天跟安卓的同学对接一个问题, 发现了一个及其坑爹的BUG, 安卓在进行UrlEncode编码时, 将空格转义为了"+", 但是iOS这边进行UrlEncode编码时, 是将空格转义为"%20", 这不坑爹的嘛, 在对接的时候两边数据对不上
在Stack Overflow上找到了解释URL encoding the space character: + or %20?

简单来说就是:%20是比较老一点的写法,现在的做法是:url中的“?”前的空格要转义成“%20”,“?”之后的空格要转义成“+”!

而Jave系统中自带的方法是这么做的, 但是在iOS系统中调用[str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 是将空格转义为了"%20"

经测试后


image.png

后来这边的处理方法为
特殊字符使用[str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"#%<>[\]^`{|}"]+"].invertedSet];
这个方法去进行UrlEnCode转义,

然后iOS端在解析之前, 先将未转义的字符串中的"+"替换为" "空格

然后再进行[str stringByRemovingPercentEncoding];iOS端就可以正常解析使用, 暂时只能想到这个方法

上一篇 下一篇

猜你喜欢

热点阅读