本文是對于js編碼格式的一個(gè)筆記,最緊要面試了感覺基礎(chǔ)很差控漠,在復(fù)習(xí)cookie的時(shí)候提到了cookie的編碼格式問題蔓倍,想一想編碼的知識(shí)點(diǎn)好像都沒有認(rèn)真總結(jié)過,所以今天我要把這篇知識(shí)點(diǎn)補(bǔ)上盐捷,而且要補(bǔ)好偶翅。
js中有三個(gè)函數(shù)是用于編碼的,他們是 escape(),encodeURI(),encodeURIComponent()函數(shù)碉渡。
而相對應(yīng)的解碼函數(shù)式:unescape,decodeURI,decodeURIComponent 聚谁。
escape函數(shù)在js學(xué)習(xí)手冊上的描述是:
對 String 對象編碼以便它們能在所有計(jì)算機(jī)上可讀。
escape 方法返回一個(gè)包含了 charstring 內(nèi)容的字符串值( Unicode 格式)滞诺。所有空格形导、標(biāo)點(diǎn)、重音符號(hào)以及其他非 ASCII 字符都用 %xx 編碼代替习霹,其中 xx 等于表示該字符的十六進(jìn)制數(shù)朵耕。例如,空格返回的是 "%20" 淋叶。
字符值大于 255 的以 %uxxxx 格式存儲(chǔ)阎曹。
**注意 escape 方法不能夠用來對統(tǒng)一資源標(biāo)示碼 (URI) 進(jìn)行編碼。對其編碼應(yīng)使用 encodeURI 和encodeURIComponent 方法煞檩。
(轉(zhuǎn))該方法不會(huì)對 ASCII 字母和數(shù)字進(jìn)行編碼处嫌,也不會(huì)對下面這些 ASCII 標(biāo)點(diǎn)符號(hào)進(jìn)行編碼: - _ . ! ~ * ' ( ) 。其他所有的字符都會(huì)被轉(zhuǎn)義序列替換形娇。
但是會(huì)編碼(;/?:@&=+$,#)這些在地址欄中經(jīng)常用到的特殊字符
**
var a = "stron g";
console.log(escape(a)); //stron%20g
var a = "stron;/?:@&=+$,#g";
console.log(escape(a)); //stron%3B%2F%3F%3A%40%26%3D%2B%24%2C%23g
encodeURI
將文本字符串編碼為一個(gè)有效的統(tǒng)一資源標(biāo)識(shí)符 (URI)锰霜。
說明:
encodeURI 方法返回一個(gè)編碼的 URI。如果您將編碼結(jié)果傳遞給 decodeURI桐早,那么將返回初始的字符串癣缅。encodeURI 方法不會(huì)對下列字符進(jìn)行編碼:":"、"/"哄酝、";" 和 "?"友存。請使用 encodeURIComponent 方法對這些字符進(jìn)行編碼。
此方法是不會(huì)將(;/?:@&=+$,#)這些字符編碼的
var a = "str on @g";
console.log(encodeURI(a)) //stron;/?:@&=+$,#g
encodeURIComponent
說明:URIComponent 是一個(gè)完整的 URI 的一部分陶衅。
如果 encodedURIString 無效屡立,將產(chǎn)生一個(gè) URIError。
該方法不會(huì)對 ASCII 字母和數(shù)字進(jìn)行編碼搀军,也不會(huì)對這些 ASCII 標(biāo)點(diǎn)符號(hào)進(jìn)行編碼: - _ . ! ~ * ' ( ) 膨俐。
但是會(huì)編碼(;/?:@&=+$,#)這些在地址欄中經(jīng)常用到的特殊字符
var a = "str on @g";
console.log(encodeURIComponent(a)) //stron%3B%2F%3F%3A%40%26%3D%2B%24%2C%23g