Url復号と符号化escape()、encodeURI()、encodeURIComponent()の区別の詳細

3511 ワード

1 Server.UrlDecode; 
2 Server.UrlEncode; 

url符号化は、ブラウザがフォーム入力をパッケージ化するためのフォーマットです.ブラウザはフォームからすべてのnameとその値を取得し、それらをname/valueパラメータで符号化(転送できない文字を削除したり、データランキングなどを削除したり)してURLの一部または分離してサーバに送信します.
データ伝送には伝送できない文字があるので、符号化し、伝送後に復号する必要があります.
 
 
Escape()、encodeURI()、encodeURIComponent()の違いの詳細
JavaScriptには文字列を符号化できる3つの関数があり、それぞれescape,encodeURI,encodeURIComponent、対応する3つの復号関数:unescape,decodeURI,decodeURIComponentである.
その違いを簡単にご紹介します
1 escape()関数
定義および用法escape()関数は、文字列を符号化することができ、これにより、すべてのコンピュータで文字列を読み取ることができる.
構文escape(string)
パラメータ記述stringが必要です.エスケープまたは符号化される文字列. 
値がエンコードされたstringのコピーを返します.一部の文字は16進数のエスケープシーケンスに置き換えられます.
この方法はASCIIアルファベットと数字を符号化しないし、以下のASCII句読点を符号化しないことを説明する:-.!~*'( ) .他のすべての文字は、エスケープシーケンスに置き換えられます.
 
2 encodeURI()関数定義と用法encodeURI()関数は、文字列をURIとして符号化することができる.
構文encodeURI(URIstring)
パラメータ記述URIstringが必要です.URIまたは他の符号化するテキストを含む文字列. 
値URIstringのコピーを返します.一部の文字は16進数のエスケープシーケンスに置き換えられます.
この方法はASCIIアルファベットと数字を符号化しないし、これらのASCII句読点を符号化しないことを説明する:-.!~*'( ) .
この方法の目的はURIを完全に符号化することであるので,以下のURIに特殊な意味を持つASCII句読点に対してencodeURI()関数はエスケープされない:;/?:@&=+$,#
 
3 encodeURIComponent()関数
定義および使用法encodeURIComponent()関数は、文字列をURIコンポーネントとして符号化することができる.
構文encodeURIComponent(URIstring)
パラメータ記述URIstringが必要です.URIコンポーネントまたは他の符号化するテキストを含む文字列. 
値URIstringのコピーを返します.一部の文字は16進数のエスケープシーケンスに置き換えられます.
この方法はASCIIアルファベットと数字を符号化しないし、これらのASCII句読点を符号化しないことを説明する:-.!~*'( ) .
他の文字(例:;/?:@&=+$、#URIコンポーネントを区切るための句読点)は、1つ以上の16進数のエスケープシーケンスによって置き換えられます.
ヒントとコメントヒント:encodeURIComponent()関数とencodeURI()関数の違いに注意してください.前者は、パラメータがURIの一部(プロトコル、ホスト名、パス、クエリー文字列など)であると仮定します.したがって、encodeURIComponent()関数は、URIの各部分を区切る句読点に変換される.
 
4まとめ:
3つの関数の解析から,escape()はASCIIアルファベット,数字,特定の記号を除いて,伝達された文字列をすべてエスケープ符号化するので,URL符号化を行うには,この方法を用いないほうがよいことが分かった.一方、encodeURI()は、URI内の正当な文字が符号化変換されないため、URI全体を符号化するために使用される.EncodeURIComponentメソッドは、URL全体に影響を与えることなく、パラメータ内の中国語、特殊文字をエスケープするために、単一のURIComponent(要求パラメータを指す)を符号化するのに最も一般的であるべきである.
 
5例:
1 escape()

document.write(escape("http://www.w3school.com.cn/") + "
")
document.write(escape("?!=()#%&"))
出力:
http%3A//www.w3school.com.cn
%3F%21%3D%28%29%23%25%262 encodeURI()

document.write(encodeURI("http://www.w3school.com.cn/")+ "
")
document.write(encodeURI("http://www.w3school.com.cn/My first/"))
document.write(encodeURI(",/?:@&=+$#"))
出力:
http://www.w3school.com.cn/
http://www.w3school.com.cn/My%20first/
,/?:@&=+$#
URL全体を符号化するが、URLの特定の識別子は符号化されない.
3 encodeURIComponent()
例1:

document.write(encodeURIComponent("http://www.w3school.com.cn/"))
document.write("
")
document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))
document.write("
")
document.write(encodeURIComponent(",/?:@&=+$#"))
http%3A%2F%2Fwww.w3school.com.cn http%3A%2F%2Fwww.w3school.com.cn%2 Fp%201%2 F%2 C%2 F%3 F%3 A%40%26%3 D%2 B%24%23例2:document.write('
終了');

URLの中のパラメータを符号化します.パラメータもURLなので、符号化しないとURL全体のジャンプに影響します.