Swift - 实现URL字符串的编码与解码(urlEncoded、urlDecoded)
作者:hangge | 2017-04-05 08:10
我们的应用中常常需要发起 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())")
运行结果如下:
全部评论(2)
感谢您的回复,链接是后台返回的,有的链接里面有中文,有的是你说的已经转义过的,我现在的做法是先解码再编码,不知道这样会不会有问题?
站长回复:不管这个链接是不是已经转义过的,一律先解码再编码,通常是不会出问题的。
航哥你好,用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
站长回复: