浅い分析encodeURI、encodeURIComponent、decodeURI、decodeURIComponent


Global(全グローバルスコープで定義された属性および関数は、Globalの属性である)オブジェクトのencodeURI(),encodeURIComponent()方法は、ブラウザに送信するためにURI( )を符号化することができる.
有効なURIは、スペースなどの一部の文字を含んではいけません.この2つのURI符号化方法は、URIを符号化し、すべての無効な文字を特殊なUTF 8符号化で置換することができ、これにより、ブラウザが納得できるようになる.
1.encodeURI(),encodeURIComponent()まずデモの例を見ます.
var uri = 'https://www.baidu.com/s?ie=utf-16&word=hello #index.html';

encodeURI(uri)      //https://www.baidu.com/s?ie=utf-16&word=hello%20#index.html

encodeURIComponent(uri) //https%3A%2F%2Fwww.baidu.com%2Fs%3Fie%3Dutf-16%26word%3Dhello%20%23index.html
上記の例から、encodeURI()符号化後の結果は、スペースが%20に置き換えられ、スペース以外の文字は変更されていないことが分かる.encodeURIComponent()は、すべての非アルファベット文字を対応符号化に置き換えることである.encodeURI()は、全体のURIを使用することができ、encodeURIComponent()は、追加のURIの後の文字列のみを使用することができる.
したがって、一般的には、encodeURIComponent()より多くのものを使用しています.URI全体ではなく、クエリー文字列を符号化する必要があるからです.
2.decodeURI(),decodeURIComponent()この2つの方法はencodeURI(),encodeURIComponent()に対応しており、decodeURI()encodeURI()を使用して置換された文字のみを復号することができ、decodeURIComponent()を使用して代替された文字を復号することができる.
var uri = 'https://www.baidu.com/s?ie=utf-16&word=hello%20%24#index.html';

decodeURI(uri)      //https://www.baidu.com/s?ie=utf-16&word=hello %24#index.html

decodeURIComponent(uri) //https://www.baidu.com/s?ie=utf-16&word=hello $#index.html
uriには符号化値encodeURIComponent()があるので、%20,%24は、decodeURIだけをスペースに変換することができ、%20は任意の処理からだけではない.%24%24シンボルを示すので、$シンボルは$を使用して置換されるものではない.encodeURIは、任意の特殊文字の符号化を説明することができる.decodeURIComponentを使用して、URL Searchのパラメータをオブジェクトに変換できます.
var str = 'https://www.sogou.com/sie?ie=utf8&query=%E5%91%B5%E5%91%B5&pid=AQKo5-0000';

var query = str.split('?')[1];

var result = {};

query.split("&").forEach(function(part) {
  var item = part.split("=");
  result[item[0]] = decodeURIComponent(item[1]);
});

console.log(result);

  :{ie: "utf8", query: "  ", pid: "AQKo5-0000"}
3.decodeURIComponentECMAScript v 3は、標準からescape unescape関数を削除し、それを使用することに反対しているので、escape unescapeで代替すべきである.decodeURI() decodeURIComponent()方法はユニックの文字をすべて符号化することができます.URIはASCLLの文字を正しく符号化することができます.次のdemoを見ることができます.符号化の結果はちょっと不揃いで、使いにくいです.
var str = 'https://www.baidu.com/s?tn=mswin_oem_dg&ie=utf-16&word=hello';
escape(str)     //https%3A//www.baidu.com/s%3Ftn%3Dmswin_oem_dg%26ie%3Dutf-16%26word%3Dhello