encodeURI / encodeURIComponent の代わりに escape を使用するのはどのような場合ですか? 質問する

encodeURI / encodeURIComponent の代わりに escape を使用するのはどのような場合ですか? 質問する

クエリ文字列をエンコードして Web サーバーに送信する場合、escape()と をいつ使用すればよいですencodeURI()encodeURIComponent()

エスケープを使用します:

escape("% +&=");

または

使用encodeURI()/encodeURIComponent()

encodeURI("http://www.google.com?var1=value1&var2=value2");

encodeURIComponent("var1=value1&var2=value2");

ベストアンサー1

逃げる()

使用しないでください! はescape()セクションで定義されていますB.2.1.1 エスケープそしてその付録Bの紹介文言う:

... この付録で指定されているすべての言語機能と動作には、1 つ以上の望ましくない特性があり、従来の使用法がない場合は、この仕様から削除されます。 ...
... プログラマーは、新しい ECMAScript コードを作成するときに、これらの機能と動作を使用したり、その存在を前提としたりしないでください。...

行動:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/エスケープ

特殊文字は例外としてエンコードされます: @*_+-./

コード単位値が 0xFF 以下の文字の 16 進形式は、2 桁のエスケープ シーケンスです%xx

より大きなコード単位の文字には、4桁の形式%uxxxxが使用されます。これはクエリ文字列内では許可されません(RFC3986):

query       = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

パーセント記号は、その後に 2 つの 16 進数が直接続く場合にのみ許可されます。パーセントの後に が続くことuはできません。

エンコードURI()

機能する URL が必要な場合は encodeURI を使用します。次の呼び出しを行います。

encodeURI("http://www.example.org/a file with spaces.html")

取得するため:

http://www.example.org/a%20file%20with%20spaces.html

encodeURIComponentを呼び出さないでください。URLが破壊され、

http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html

encodeURI は encodeURIComponent と同様に、' 文字をエスケープしないことに注意してください。

URIコンポーネントをエンコードする()

URL パラメータの値をエンコードする場合は、encodeURIComponent を使用します。

var p1 = encodeURIComponent("http://example.org/?a=12&b=55")

次に、必要な URL を作成します。

var url = "http://example.net/?param1=" + p1 + "&param2=99";

そして、次の完全な URL が取得されます。

http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55&param2=99

encodeURIComponent は文字をエスケープしないことに注意してください'。よくあるバグは、 などの HTML 属性を作成するためにこれを使用することで、href='MyUrl'インジェクション バグが発生する可能性があります。文字列から HTML を構築する場合は、属性引用符"の代わりに を使用する'か、エンコードの追加レイヤーを追加します ('は %27 としてエンコードできます)。

このタイプのエンコーディングの詳細については、以下を参照してください。http://en.wikipedia.org/wiki/パーセントエンコーディング

おすすめ記事