エスケープ()
使わないで!
セクションB.2.1.2 エスケープescape()
で定義されており、附属書 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
ません。
エンコードURI()
有効な URL が必要な場合は、encodeURI を使用します。次のように呼び出します。
encodeURI("http://www.example.org/a file with spaces.html")
取得するため:
http://www.example.org/a%20file%20with%20spaces.html
URL が破棄されて返されるため、encodeURIComponent を呼び出さないでください。
http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html
encodeURIComponent と同様に、encodeURI は ' 文字をエスケープしないことに注意してください。
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を確認してください。