クエリ文字列をエンコードして 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 + "¶m2=99";
そして、次の完全な URL が取得されます。
http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55¶m2=99
encodeURIComponent は文字をエスケープしないことに注意してください'
。よくあるバグは、 などの HTML 属性を作成するためにこれを使用することで、href='MyUrl'
インジェクション バグが発生する可能性があります。文字列から HTML を構築する場合は、属性引用符"
の代わりに を使用する'
か、エンコードの追加レイヤーを追加します ('
は %27 としてエンコードできます)。
このタイプのエンコーディングの詳細については、以下を参照してください。http://en.wikipedia.org/wiki/パーセントエンコーディング