Swift - 实现URL字符串的编码与解码(urlEncoded、urlDecoded)
我们的应用中常常需要发起 HTTP 网络请求,如果拼接的 URL 地址中包含有中文、空格、特殊符号时,我们就要对其转义。否则就会无法正确访问。
1,扩展String,添加相关的转义方法
Swift3 新增的 addingPercentEncoding 方法实现了编码的功能,也就是将指定的字符集使用“%”代替。这里为方便使用,我们扩展 String,为其添加两个新方法:
- urlEncoded():将原始的 url 编码为合法的 url
- urlDecoded():将编码后的 url 转换回原始的 url
extension String { //将原始的url编码为合法的url func urlEncoded() -> String { let encodeUrlString = self.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) return encodeUrlString ?? "" } //将编码后的url转换回原始的url func urlDecoded() -> String { return self.removingPercentEncoding ?? "" } }
2,使用样例
let urlStr = "http://hanggge.com?name=航歌&key=!*'();:@&=+$,/?%#[]" print("转义后的url:\(urlStr.urlEncoded())") print("还原后的url:\(urlStr.urlEncoded().urlDecoded())")运行结果如下:

感谢您的回复,链接是后台返回的,有的链接里面有中文,有的是你说的已经转义过的,我现在的做法是先解码再编码,不知道这样会不会有问题?
航哥你好,用urlEncoded编码,如果链接里面有%会导致链接打不开
转义前:http://file.ubye.cn/UbyeBackgroundFiles/img/package_sweep_server/2018081616474824fuwuqian%20(1).png
转义后:http://file.ubye.cn/UbyeBackgroundFiles/img/package_sweep_server/2018081616474824fuwuqian%2520(1).png