Swift URLEncode
Swift URL Encode问题: 最近在做swift项目时,遇到一个比较有意识的事情,服务端返回的html string按照URL Encode编码之后,iOS这边无法正常加载html,安卓可以的.于是在排查问题,最终发现是后端做URLEncode时,对于空格编码之后,对应的是"+",没错就是"加号",导致在iOS这边Decode之后,无法拿到正确的htmlString.记录一下,之前也没遇
·
Swift URL Encode问题
: 最近在做swift项目时,遇到一个比较有意识的事情,服务端返回的html string按照URL Encode编码之后,iOS这边无法正常加载html,安卓可以的.于是在排查问题,最终发现是后端做URLEncode时,对于空格编码之后,对应的是"+",没错就是"加号",导致在iOS这边Decode之后,无法拿到正确的htmlString.
记录一下,之前也没遇到过类似问题.也希望对遇到类似问题的兄弟姐们有个帮助.
以下代码均是Swift版本的
1. “空格"和”+"在不同系统的编码
安卓系统
- “空格” --> “+”
- “+” --> “%2b”
iOS系统
- “空格” --> “%20”
- “+” --> “%2b”
通过对比很容易就能发现,为啥按照正常的操作无法decode了,因为编码结果不同,所以解码的时候在含有这些特殊字符的时候就会出现相关异常.
2. iOS解决方法
-
1.先对出现异常的编码字符进行替换,不用担心替换的时候把原本是加号的字符也给替换了,因为"+"号的编码结果会改变的.
-
2.替换之后再进行解码操作
-
3.代码如下(针对string写的一个扩展):
///URL Decode var URLDecode:String? { if self.count < 1 { return "" } //编码之后空格变成了 "+",先复原空格,再解码 var filterContent = self.replacingOccurrences(of: "+", with: " ") filterContent = filterContent.removingPercentEncoding! return filterContent }
3. Swift URL Encode方法
/// URL encode
var URLEncode:String{
if self.count < 1 {
return ""
}
let encodeStr = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, self as? CFString,
nil,
"!*'();:@&=+$,/?%#[]" as CFString, CFStringBuiltInEncodings.UTF8.rawValue)
return (encodeStr as String?)!
}
如果你需要的是OC版本的,可以在下方留言.
更多推荐
已为社区贡献1条内容
所有评论(0)