js編碼和解碼

編碼就是把能看的懂得字符轉換成一些奇奇怪怪的二進制字節(jié)碼文件

解碼就是把哪些看不懂的二進制字節(jié)碼轉換成能看的懂得字符

為什么要進行編碼

在URI的最初設計時,希望能通過書面轉錄拣播,比如寫在餐巾紙上告訴另外一人,因此URI的構成字符必須是可寫的ASCII字符碟嘴。在這些可書寫的字符里,由于一些字符在不同操作系統(tǒng)的編碼有不同的解析囊卜,被包含在“不安全字符”之中娜扇,要格外注意。

廢話少說栅组,我們先來準備一個字符串
var str = 'http://www.baidu.co m/+do/s?word=百度&ct=21';

escape() 和 unescape()

var a = escape(str);

    console.log(a) 

   結果:http%3A//www.baidu.com/do/s%3Fword%3D%u767E%u5EA6%26ct%3D21

返回一個以編碼string的副本雀瓢。 其中的某些字符被替換成了16進制的轉義序列

該方法不會對 ASCII 字母和數(shù)字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 玉掸。其他所有的字符都會被轉義序列替換刃麸。

只能被unescape()所解碼,使用decodeURI()和decodeURIComponent()解碼時會直接報錯司浪。

js使用數(shù)據(jù)時可以使用escape泊业。

 var b = unescape(a); 

    console.log(b)

    結果:http://www.baidu.com/do/s?word=百度&ct=21

只能解碼escape()所轉的編碼,解碼encodeURI()和encodeURIComponent()轉的URI時會把文字轉為(奇奇怪怪的亂碼)特殊編碼啊易。

encodeURI 和 encodeURIComponent()

    var c = encodeURI(str);

    console.log(c) 

    結果:http://www.baidu.com/do/sword=%E7%99%BE%E5%BA%A6&ct=21

返回一個URLstring的副本吁伺,其中的某些字符將被16進制的轉義序列進行替換。

該方法不會對 ASCII 字母和數(shù)字進行編碼认罩,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 箱蝠。該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號垦垂,encodeURI() 函數(shù)是不會進行轉義的:;/?:@&=+$,#

   var d = encodeURIComponent(str);
   
   console.log(d) 

   結果:http%3A%2F%2Fwww.baidu.com%2Fdo%2Fs%3Fword%3D%E7%99%BE%E5%BA%A6%26ct%3D21

返回一個URLstring的副本,其中的某些字符將被16進制的轉義序列進行替換牙瓢。

該方法不會對 ASCII 字母和數(shù)字進行編碼劫拗,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。其他字符(比如 :;/?:@&=+$,# 這些用于分隔 URI 組件的標點符號)矾克,都是由一個或多個十六進制的轉義序列替換的页慷。

encodeURIComponent() 函數(shù) 與 encodeURI() 函數(shù)的區(qū)別之處,前者假定它的參數(shù)是 URI 的一部分(比如協(xié)議胁附、主機名酒繁、路徑或查詢字符串)。因此 encodeURIComponent() 函數(shù)將轉義用于分隔 URI 各個部分的標點符號控妻。

decodeURI

    進行url跳轉時可以整體使用encodeURI
    對于encodeURIComponent()轉義替換的分隔 URI 組件的符號無法進行解碼州袒。

    var e = decodeURI(c);
    console.log(e) 
    http://www.baidu.com/do/s?word=百度&ct=21
    
    var f = decodeURI(d);
    console.log(f)

    結果:http%3A%2F%2Fwww.baidu.co m%2F%2Bdo%2Fs%3Fword%3D百度%26ct%3D21%23name%3D"la"
decodeURIComponent
傳遞參數(shù)時需要使用encodeURIComponent,這樣組合的url才不會被#等特殊字符截斷弓候。

    var y = decodeURIComponent(d);

    console.log(y) 

    結果:http://www.baidu.com/do/s?word=百度&ct=21


    var z = decodeURIComponent(c);

    console.log(z)

    結果:http://www.baidu.com/do/s?word=百度&ct=21

escape()是JavaScript 1.0 時的

encodeURI() 和 encodeURIComponent()是 JavaScript 1.5 的

通過對三個函數(shù)的分析郎哭,我們可以知道:escape()除了 ASCII 字母他匪、數(shù)字和特定的符號外,對傳進來的字符串全部進行轉義編碼夸研,因此如果想對URL編碼邦蜜,最好不要使用此方法。而encodeURI() 用于編碼整個URI,因為URI中的合法字符都不會被編碼轉換亥至。ncodeURIComponent方法在編碼單個URIComponent(指請求參數(shù))應當是最常用的悼沈,它可以講參數(shù)中的中文、特殊字符進行轉義姐扮,而不會影響整個URL井辆。

// 參考一下就算了
escape對0-255以外的unicode值進行編碼時輸出%u****格式,其它情況下escape溶握,encodeURI杯缺,encodeURIComponent編碼結果相同。最多使用的應為encodeURIComponent睡榆,它是將中文萍肆、韓文等特殊字符轉換成utf-8格式的url編碼,所以如果給后臺傳遞參數(shù)需要使用encodeURIComponent時需要后臺解碼對utf-8支持(form中的編碼方式和當前頁面編碼方式相同)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末胀屿,一起剝皮案震驚了整個濱河市塘揣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宿崭,老刑警劉巖亲铡,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異葡兑,居然都是意外死亡奖蔓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門讹堤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吆鹤,“玉大人,你說我怎么就攤上這事洲守∫晌瘢” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵梗醇,是天一觀的道長知允。 經常有香客問我,道長叙谨,這世上最難降的妖魔是什么温鸽? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮唉俗,結果婚禮上嗤朴,老公的妹妹穿的比我還像新娘配椭。我一直安慰自己,他們只是感情好雹姊,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布股缸。 她就那樣靜靜地躺著,像睡著了一般吱雏。 火紅的嫁衣襯著肌膚如雪敦姻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天歧杏,我揣著相機與錄音镰惦,去河邊找鬼。 笑死犬绒,一個胖子當著我的面吹牛旺入,可吹牛的內容都是我干的。 我是一名探鬼主播凯力,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼茵瘾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咐鹤?” 一聲冷哼從身側響起拗秘,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祈惶,沒想到半個月后雕旨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡捧请,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年凡涩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片血久。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡突照,死狀恐怖,靈堂內的尸體忽然破棺而出氧吐,到底是詐尸還是另有隱情,我是刑警寧澤末盔,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布筑舅,位于F島的核電站,受9級特大地震影響陨舱,放射性物質發(fā)生泄漏翠拣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一游盲、第九天 我趴在偏房一處隱蔽的房頂上張望误墓。 院中可真熱鬧蛮粮,春花似錦、人聲如沸谜慌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欣范。三九已至变泄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恼琼,已是汗流浹背妨蛹。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晴竞,地道東北人蛙卤。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像噩死,于是被迫代替她去往敵國和親颤难。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容