1.encodeComponent編碼url,url不能直接使用,須要編碼php
var rlt = "http://service.weibo.com/share/share.php?"; var url = 'http://www.baidu.com'; var params = { appkey: "379570494", title: "領杉果紅包,享更多優惠!點擊領取:", url: url }; for (var i in params) { rlt += i + '=' + params[i] + '&'; } for (var i in params) { rlt += i + '=' + encodeURIComponent(params[i]) + '&'; } console.log(rlt);
1.URL就是網址,只要上網,就必定會用到.
只有字母和數字[0-9a-zA-Z],一些特殊符號$-_.+!*'(),以及某些保留字,才能夠不通過編碼直接用於URL.
2.這意味着,若是URL中有漢字,就必須編碼後使用,可是麻煩的是,RFC1738沒有規定具體的編碼方法,
而是交給應用程序(瀏覽器)本身決定,這致使'URL編碼'成爲了一個混亂的領域.
3.包括:ajax請求url地址,瀏覽器上直接用get或post發出http請求,網址路徑中包含漢字,查詢字符串包含漢字.
4.使用js先對URL編碼,而後再向服務器提交,不給瀏覽器插手的機會,
由於js的輸出老是一致的,因此就保證了服務器獲得的數據是格式統一的.ajax
escape()不能直接用於URL編碼,他的真正做用是返回一個字符串的Unicode編碼值.瀏覽器
1.encodeURI()是js中真正用來對URL編碼的函數
2.它着眼於對整個URL進行編碼,所以除了常見的符號之外,對其餘一些在網址中有特殊含義的符號;/?:@&=+$,#也不進行編碼,
編碼後,它輸出符號的utf-8形式,而且在每一個字節前加上%服務器
與encodeURI()的區別是,它用於對URL的組成部分進行個別編碼,而不用於對整個URL進行編碼.
所以,;/?:@&=+$,#這些在encodeURI()中不被編碼的符號,在encodeURIComponent中通通會被編碼.app
var test = 'http://www.baidu.com/my app?search=a&b=3#2哈哈'; var test1 = encodeURIComponent(test); var test2 = encodeURI(test); console.log(test); // http://www.baidu.com console.log(test1); // http%3A%2F%2Fwww.baidu.com%2Fmy%20app%3Fsearch%3Da%26b%3D3%232%E5%93%88%E5%93%88,瀏覽器沒法解析這個地址 console.log(test2); // http://www.baidu.com/my%20app?search=a&b=3#2%E5%93%88%E5%93%88,瀏覽器沒法解析這個地址 var test3 = decodeURIComponent(test1); var test4 = decodeURI(test2); console.log(test3); console.log(test4); var test5 = escape(test); var test6 = unescape(test5); console.log(test5); // http%3A//www.baidu.com/my%20app%3Fsearch%3Da%26b%3D3%232%u54C8%u54C8 console.log(test6); // http://www.baidu.com/my app?search=a&b=3#2哈哈