0
点赞
收藏
分享

微信扫一扫

iOS UrlEnCode加密需要注意

夏侯居坤叶叔尘 2021-09-28 阅读 90
日记本

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

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

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

经测试后



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

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

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

举报

相关推荐

0 条评论