关於URL encode

缘由:

开发时常常会遇到要对api传送参数的状况,
但常常都是传送String Int Bool等,
那假如是传送一个连结呢?
但缺乏资讯背景的我,对於这种小陷阱,就这样顺顺地跳下去了XD
原本我就想说String啊
跟一般的处理一样,结果送出错误

解决方法:

排除是api的问题,那只能是要带URL的参数值带错了,
带出去的网址看起来是不完整的,从某些符号後就断了,
再仔细看看应该是参数带到了URL的保留字符(例如:”@“、”:”等等)、或是中文字等等,
所以需要进行URL Encode的处理(百分比编码),
除了百分比和数字,还搭配16进制的大写英文

网路上有很多线上URL ENCODE的资源可以使用

例如:https://www.urlencoder.org/
转换范例:
https://www.google.com/search?client=safari&rls=en&q=url编码&ie=UTF-8&oe=UTF-8
转换後变成
https%3A%2F%2Fwww.google.com%2Fsearch%3Fclient%3Dsafari%26rls%3Den%26q%3Durl%E7%B7%A8%E7%A2%BC%26ie%3DUTF-8%26oe%3DUTF-8

从上面来看,encode後,将不再看到「:」、「//」、「?」、「=」、「&」和中文字,有处理过後的url才能当作参数值来传送
那在swift要如何使用URL encode呢?swift 的函式库有可用的,如下:

let url = “https://www.google.com/search?client=safari&rls=en&q=url编码&ie=UTF-8&oe=UTF-8”
let urlEncoded = url!.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

网路上查询到的字符集(CharacterSet)各是如下:

urlFragmentAllowed  "#%<>[\]^`{|}
urlHostAllowed      "#%/<>?@\^`{|}
urlPasswordAllowed  "#%/:<>?@[\]^`{|}
urlPathAllowed      "#%;<>?[\]^`{|}
urlQueryAllowed     "#%<>[\]^`{|}
urlUserAllowed      "#%/:<>?@[\]^`

若你需要encode其他特殊字符,也可以自订字符集进行url encode

let url = “https://www.google.com/search?client=safari&rls=en&q=url编码&ie=UTF-8&oe=UTF-8”
let newCharacterSet = CharacterSet(charactersIn: "!*'();:@=&+$,/?%#[] ").inverted
let urlEncoded = url!.addingPercentEncoding(withAllowedCharacters: newCharacterSet)

<<:  GitHub 时程与版本管理 - Milestone, Tag 与 Release

>>:  GoDaddy 设定 DNS 转址到 IIS 上指定网站

初学者跪着学JavaScript Day25 : 宁愿找this也不碰历史

一日客语:中文:太阳 客语:ngidˋ teuˇ(日头) 在学建构函式时很常看到this,建构函式内...

Day 29 (Jq)

1.empty、remove、detach比较 (1)empty vs remove empty()...

[Day 17] 轻量化的梯度提升机 - LightGBM

LightGBM 今日学习目标 LightGBM 与 XGBoost 比较 了解 LightGBM ...

Day-20 堆叠(Stack)

堆叠介绍 堆叠是限制插入元素和删除元素只能在同一个位置的表(list),该位置一般来说称为栈顶(To...

Day5 中秋就是要继续烤肉阿-日式盐葱酱烧肉

吃了美式和韩式烤肉,两天都是重口味烤肉,今天换清爽一点的日式烤肉吧 这次要自制日式盐葱酱,家里一秒变...