fuga()
Não use!
escape()
é definido na seção B.2.1.2, escape e o texto de introdução do anexo B diz:
... Todos os recursos e comportamentos de linguagem especificados neste anexo têm uma ou mais características indesejáveis e, na ausência de uso legado, seriam removidos desta especificação. Os
programadores não devem usar ou assumir a existência desses recursos e comportamentos ao escrever o novo código ECMAScript.
Comportamento:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
Caracteres especiais são codificados, com exceção de: @ * _ + -. /
A forma hexadecimal para caracteres, cujo valor de unidade de código é 0xFF ou menos, é uma sequência de escape de dois dígitos: %xx
.
Para caracteres com uma unidade de código maior, %uxxxx
é utilizado o formato de quatro dígitos . Isso não é permitido em uma sequência de consultas (conforme definido no RFC3986 ):
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
Um sinal de porcentagem é permitido apenas se for diretamente seguido por dois hexadígitos, por cento seguido por u
não é permitido.
encodeURI ()
Use encodeURI quando quiser um URL de trabalho. Faça esta ligação:
encodeURI("http://www.example.org/a file with spaces.html")
para obter:
http://www.example.org/a%20file%20with%20spaces.html
Não chame encodeURIComponent, pois isso destruiria o URL e retornaria
http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html
encodeURIComponent ()
Use encodeURIComponent quando desejar codificar o valor de um parâmetro de URL.
var p1 = encodeURIComponent("http://example.org/?a=12&b=55")
Em seguida, você pode criar o URL necessário:
var url = "http://example.net/?param1=" + p1 + "¶m2=99";
E você obterá este URL completo:
http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55¶m2=99
Observe que encodeURIComponent não escapa ao '
caractere. Um bug comum é usá-lo para criar atributos html como href='MyUrl'
, que podem sofrer um bug de injeção. Se você estiver construindo html a partir de strings, use em "
vez de '
para aspas de atributo ou adicione uma camada extra de codificação ( '
pode ser codificada como% 27).
Para mais informações sobre este tipo de codificação, você pode verificar: http://en.wikipedia.org/wiki/Percent-encoding
encodeURIComponent("var1=value1&var2=value2")
é o caso de uso típico. Esse exemplo codificará o e , o que provavelmente não é o que se pretendia! normalmente é aplicado separadamente apenas ao valor em cada par de valores-chave (a parte após cada ).=
&
encodeURIComponent
=