JavaScript には、文字列をエンコードできる 3 つの関数、つまり、escape、encodeURI、encodeURIComponent、および対応する 3 つのデコード関数があります。
エスケープ、デコードURI、デコードURIコンポーネント。
以下にそれらの違いを簡単に紹介します
1 つのエスケープ() 関数
定義と使用法
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("http://cang.baidu.com/bruce42")+'">退出</a>');</script>
パラメータも URL であるため、URL 内のパラメータをエンコードします。エンコードしないと、URL 全体のジャンプに影響します。