Swift URLEncode

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版本的,可以在下方留言.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值