Background encodeURI と encodeURIComponent はどちらも ECMA-262 標準で定義された関数です (JavaScript、ActionScript など)。これらはどちらも URI (RFC-2396) 文字列をエンコードするために使用されるグローバル関数ですが、その処理方法と使用シナリオは異なります。それらの違いを説明するには、まず RFC-2396
予約文字における URI 内の文字の分類を理解する必要があります。これらの文字は URI 内の予約されたキー文字であり、URI のさまざまな部分を区切るために使用されます。 。これらの文字は次のとおりです: ";" | "/" | ""文字のタイプは RFC-2396 で特別に定義されていますが、その使用法については特別な説明はありません。他の RFC 標準に関連している可能性があります。 これらの文字は次のとおりです: 「-」 | 「_」 | 「!」 | 「(」 | 「)」 |クラス文字は URI の主要部分であり、すべての大文字、小文字、数字が含まれます
上記の 3 種類の文字列を紹介した後、encodeURI 関数と encodeURIComponent 関数の違いを説明するのは非常に簡単です。
encodeURI: この関数は、渡された文字列内のすべての非 (基本文字、マーク文字、予約文字) に対してエスケープを実行します。エスケープする必要があるすべての文字は、UTF-8 エンコーディングに従って 1、2、または 3 バイトの 16 進エスケープ文字 (%xx) に変換されます。たとえば、文字スペース「 」は「 」に変換されます。このエンコード モードでは、エンコードする必要がある ASCII 文字は 1 バイトのエスケープ文字に置き換えられ、u0080 と u007ff の間の文字は 2 バイトのエスケープ文字に置き換えられ、他の 16 個の Unicode 文字は 3 バイトの
に置き換えられます。 encodeURIComponent: この関数の処理方法と encodeURI の違いは 1 つだけあり、予約文字に対してもエスケープ エンコードが行われます。たとえば、文字「:」は、
ではなく文字「:」でエスケープされます。上記に 2 つの異なる関数があるのは、JS コードを記述するときに URI のエンコード処理要件が 2 つ異なるためです。 encodeURI を使用すると、完全な URI 文字列をエンコードできます。 encodeURIComponent は、URI の一部をエンコードして、この部分に URI 予約文字を含めることができます。これは日常のプログラミングに非常に役立ちます。たとえば、次の URI 文字列:
http://www.mysite.com/send-to-friend.aspx?url=http://www.mysite.com/product.html
この URI 内文字列を入力します。 send-to-friend.aspx ページでは、リンクを含む電子メール コンテンツが作成されます。このリンクのアドレスは、上記の URI 文字列の URL 値です。明らかに、上記の URL 値は URI の一部であり、URI の予約キー文字が含まれています。使用する前に encodeURIComponent を呼び出してエンコードする必要があります。そうしないと、上記の URI 文字列はブラウザによって無効な URI とみなされます。正しい URI は次のとおりです:
http://www.mysite.com/send-to-friend.aspx?url=http://www.mysite.com/product.html
Example
encodeURI
var uri="my test .asp?name=ståle&car=saab";
document.write(encodeURI(uri));
上記の出力は次のとおりです。 asp?name=ståle&car=saab
encodeURIComponent
コードをコピー
コードは次のとおりです var uri="http://jb51.net/my test.asp?name=ståle&car=saab";
document.write(encodeURIComponent(uri)); >
上記の出力は次のようになります:
http://jb51.net/my test.asp?name=ståle&car=saab
その他
ECMA-262 標準では、デコードこれら 2 つのエンコード関数に対応するグローバル関数も定義されており、それらは decodeURI と decodeURIComponent です。それらを使用して、エンコードされた文字列をデコードできます