JavaScript には、文字列をエンコードできる 3 つの関数 (escape、encodeURI、encodeURIComponent) と、対応する 3 つのデコード関数 (unescape、decodeURI、decodeURIComponent) があります。
以下にそれらの違いを簡単に紹介します:
1 escape() 関数
定義と使用法
escape() 関数は、すべてのコンピュータで読み取れるように文字列をエンコードします。
文法
エスケープ(文字列)
パラメータの説明
文字列は必須です。エスケープまたはエンコードされる文字列。
戻り値
エンコードされた文字列のコピー。これらの文字の一部は 16 進数のエスケープ シーケンスに置き換えられます。
説明
このメソッドは、ASCII 文字と数字、および次の ASCII 句読点文字をエンコードしません: - !他のすべての文字はエスケープ シーケンスに置き換えられます。
2 encodeURI() 関数
定義と使用法
encodeURI() 関数は、文字列を URI としてエンコードします。
文法
encodeURI(URIstring)
パラメータの説明
URIstring は必須です。エンコードされる URI またはその他のテキストを含む文字列。
戻り値
一部の文字が 16 進数のエスケープ シーケンスに置き換えられた、URIstring のコピー。
説明
このメソッドは、ASCII 文字と数字、および ASCII 句読点文字 - _ ! * ' ( ) をエンコードしません。
このメソッドの目的は、URI を完全にエンコードすることであるため、encodeURI() 関数は、URI 内で特別な意味を持つ次の ASCII 句読点をエスケープしません: ;/?:@&= $, #
3 encodeURIComponent() 関数
定義と使用法
encodeURIComponent() 関数は、文字列を URI コンポーネントとしてエンコードします。
文法
encodeURIComponent(URIstring)
パラメータの説明
URIstring は必須です。エンコードされる URI コンポーネントまたはその他のテキストを含む文字列。
戻り値
一部の文字が 16 進数のエスケープ シーケンスに置き換えられた、URIstring のコピー。
説明
このメソッドは、ASCII 文字と数字、および ASCII 句読点文字 - _ ! * ' ( ) をエンコードしません。
他の文字 (:;/?:@&= $,# など、URI コンポーネントを区切るために使用される句読点) は、1 つ以上の 16 進数のエスケープ シーケンスで置き換えられます。
ヒントとメモ
ヒント: encodeURIComponent() 関数は、引数が URI (プロトコル、ホスト名、パス、クエリ文字列など) の一部であると想定している点で encodeURI() 関数とは異なることに注意してください。したがって、encodeURIComponent() 関数は、URI の部分を区切るために使用される句読点文字をエスケープします。
4 概要:
3 つの関数の分析を通じて、escape() は ASCII 文字、数字、特定の記号を除くすべての受信文字列をエスケープすることがわかります。そのため、URL をエンコードしたい場合は、これを使用しないのが最善です。方法。また、URI 内の有効な文字はエンコードおよび変換されないため、encodeURI() を使用して URI 全体をエンコードします。 encodeURIComponent メソッドは、単一の URIComponent (リクエスト パラメーターを参照) をエンコードするときに最も一般的に使用され、URL 全体に影響を与えることなくパラメーター内の中国語と特殊文字をエスケープできます。
5 例:
1 エスケープ()
<script type="text/javascript"> document.write(escape("http://www.w3school.com.cn/") + "<br />") document.write(escape("?!=()#%&")) </script>
出力:
http%3A//www.w3school.com.cn %3F%21%3D%28%29%23%25%26
2 encodeURI()
<script type="text/javascript"> document.write(encodeURI("http://www.w3school.com.cn/")+ "<br />") document.write(encodeURI("http://www.w3school.com.cn/My first/")) document.write(encodeURI(",/?:@&=+$#")) </script>
出力:
http://www.w3school.com.cn/ http://www.w3school.com.cn/My%20first/ ,/?:@&=+$#
URL 全体をエンコードしますが、URL 固有の識別子はトランスコードされません。
3 encodeURIComponent()
例 1:
<script type="text/javascript"> document.write(encodeURIComponent("http://www.w3school.com.cn/")) document.write("<br />") document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/")) document.write("<br />") document.write(encodeURIComponent(",/?:@&=+$#")) </script>
出力:
http%3A%2F%2Fwww.w3school.com.cn http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F %2C%2F%3F%3A%40%26%3D%2B%24%23
例 2:
<script language="javascript">document.write(' <a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent(" rel="external nofollow" http://cang.baidu.com/bruce42")+'">退出</a>');</script>
パラメータも URL であるため、URL 内のパラメータをエンコードします。エンコードしないと、URL 全体のジャンプに影響します。