在WEB前端开发,服务器后台开发,或者是客户端开发中,对URL进行编码是一件很常见的事情,但是由于各个年代的RFC文档中的内容一直在变化,一些年代久远的代码就对URL编码和解码的规则和现在的有一些区别。
在1994年订制的RFC1738文档中,对字符串中的除了
- _ .
之外的所有非字母数字字符都替换成百分号(%)后跟两位十六进制数,十六进制数中字母必须为大写。
在2005年定义的RFC3986中,将针对
- _.~
四个字符之外的所有非字母数字字符进行百分号编码。当然 根据URL的类型不同,有也一部分预留字符不需要进行编码,例如查询的
URL
中可以包含
? /
字符,不需要转义。更详细文档的可以查看
RFC 3986
。
addingPercentEncoding(withAllowedCharacters:
是iOS7之后出现的新API用于
url encode
。
所有类型的URL中,
"-_.~"
都不应该被转码
var str = "-_.~"
var encodeStr = str.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
print(encodeStr ?? "")