浅い分析encodeURI、encodeURIComponent、decodeURI、decodeURIComponent
4744 ワード
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.decodeURIComponent
ECMAScript 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