【JS】Base64的url轉換
最近有需要將base64的字串放到url上當參數調用。
查了一下文檔
發現base64有定義說「不建議放到url」上。
後來實作後發現,的確放在網址上會產生出許多問題。
像是base64最後的「=」
這其實算是一個補充碼,也就是當長度沒滿足條件的時候,
會自動使用「=」填充用。
而且還有一些字符也會造成問題。
後來看了一些文章後。
大概理解,只要解決三個字符的問題即可。
並且在decode強制一定要加上urldecode
不然在url轉換或跳轉時,(譬如有透過fb做過水)
有的網站會自動encode你的參數,導致在解碼的時候有問題。
以下這種方式算是另類解法,缺點是只有自己能夠讀取
(由於轉換規則是自訂)
下面是js實現的轉換代碼:(js es6語法)
以上採用的base64庫是使用這個github上的方式 (包裝成class)
https://gist.github.com/mikedamage/73711
不使用js內建的base64加解碼,是因為為了能更好兼容各個瀏覽器。
上述類可以兼容大部分瀏覽器。(需靠插件將es6降轉版本)
後記:
在寫完2個月以後,後來去查詢RFC其實原來早就已經有定義比較安全的BASE64規範
上述的寫的轉換程式碼,應該還是要參照RFC的標準來定義比較好
在Safe base64定義裡,「=」還是保持著是補充碼的性質
唯一有變的是「+」變成「-」,「/」變成「_」
效能最好的做法,就是直接去改老外寫的base64的js,替換就好。
張貼留言