URI編碼

基本概念

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,unescape

escape()不能直接用於URL編碼,他的真正做用是返回一個字符串的Unicode編碼值.瀏覽器

encodeURI和decodeURI

1.encodeURI()是js中真正用來對URL編碼的函數
2.它着眼於對整個URL進行編碼,所以除了常見的符號之外,對其餘一些在網址中有特殊含義的符號;/?:@&=+$,#也不進行編碼,
編碼後,它輸出符號的utf-8形式,而且在每一個字節前加上%服務器

encodeURIComponent和decodeURIComponent

與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哈哈
相關文章
相關標籤/搜索