逃れる()
使わないで!
escape()
セクションB.2.1.2エスケープで定義されており、附属書Bの紹介文は次のように述べています
...この付録で指定されているすべての言語機能と動作には、1つ以上の望ましくない特徴があり、レガシー使用法がない場合、この仕様から削除されます。...
...プログラマは、新しいECMAScriptコードを作成するときに、これらの機能や動作を使用したり想定したりしないでください。
動作:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
特殊文字は@ * _ +-。/を除いてエンコードされます
コード単位の値が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
は使用できません。
encodeURI()
機能する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
encodeURIComponent()
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/Percent-encodingを確認してください。
encodeURIComponent("var1=value1&var2=value2")
はないことを指摘する価値があります。その例は=
and をエンコードしますが&
、これはおそらく意図したものではありません!encodeURIComponent
通常、各キーと値のペア(各の後の部分=
)の値のみに個別に適用されます。