js編碼和解碼

只有 0-9[a-Z] $ - _ . + ! * ' ( ) , 以及某些保留字,才能不經(jīng)過編碼直接用于 URL。

例如:搜索的中文關(guān)鍵字,復(fù)制網(wǎng)址之后再粘貼就會(huì)發(fā)現(xiàn)該URL已經(jīng)被轉(zhuǎn)碼。

1、escape 和 unescape

結(jié)果:"http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1"

escape('張')

結(jié)果:"%u5F20"

  • 解碼:unescape("http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1")

結(jié)果:"http://www.baidu.com?name=zhang@xiao@jie&order=1"

unescape("%u5F20")

結(jié)果:"張"

2、encodeURI 和 decodeURI

  • 原理:返回編碼為有效的統(tǒng)一資源標(biāo)識(shí)符 (URI) 的字符串(即字符串作為 URI 進(jìn)行編碼),不會(huì)被編碼的字符:! @ # $ & * ( ) = : / ; ? + '

encodeURI()是Javascript中真正用來對(duì)URL編碼的函數(shù)。

結(jié)果:"http://www.baidu.com?name=%E5%BC%A0%E4%B8%89"

結(jié)果:"http://www.baidu.com?name=張三"

3、encodeURIComponent 和 decodeURIComponent

4、window.btoa() && window.atob() (base64編碼解碼)

  • window.btoa()對(duì)源數(shù)據(jù)進(jìn)行base64編碼
  • window.atob()對(duì)源數(shù)據(jù)進(jìn)行base64解碼
    window.btoa()僅支持 ASCII 編碼。對(duì)中文進(jìn)行編碼的話會(huì)拋出錯(cuò)誤
    image.png

解決方案1):

window.btoa(encodeURIComponent('中文'));//JUU0JUI4JUFEJUU2JTk2JTg3
decodeURIComponent(window.atob('JUU0JUI4JUFEJUU2JTk2JTg3'));//中文

解決方案2)[推薦方案]:

  • 后端返回的base64數(shù)據(jù),前端解碼(方案1則不能解碼)
window.btoa(unescape(encodeURIComponent('中文')));//5Lit5paH
decodeURIComponent(escape(window.atob('5Lit5paH')));//中文
//or
var base64 = '5oiR';
decodeURIComponent(
    atob(base64).split('').map((charCode)=>
        '%' +charCode.charCodeAt(0).toString(16)
    ).join('')
)

5、javascript中解碼utf-8

https://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript/22373061

function encode_utf8(s) {
  return unescape(encodeURIComponent(s));
}

function decode_utf8(s) {
  return decodeURIComponent(escape(s));
}

參考:https://www.cnblogs.com/z-one/p/6542955.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、escape 和 unescape 原理:對(duì)除ASCII字母、數(shù)字、標(biāo)點(diǎn)符號(hào) @ * _ + - . / 以外...
    mindy1031閱讀 980評(píng)論 0 0
  • 與樹寶漫步在公園時(shí),又發(fā)現(xiàn)梔子花。看到清香淡雅的梔子花,猛然想起我的奶奶。兒時(shí),我們親切地叫著婆婆。婆婆前婆婆后,...
    悅糖糖閱讀 409評(píng)論 1 4
  • 自某人雙親辭世作古,我升級(jí)成了監(jiān)護(hù)人,驀地覺得自己責(zé)任重大。 打暑假起,某人身體經(jīng)常出點(diǎn)小狀況,時(shí)...
    龍泉姑娘閱讀 809評(píng)論 1 4
  • 20180411 11/90 有多自律就有多自由 【優(yōu)秀是一種習(xí)慣】 【昨日早睡】 【今日早起】 【昨日青蛙】 1...
    雨晨_95a8閱讀 177評(píng)論 0 0

友情鏈接更多精彩內(nèi)容