échapper()
Ne l'utilisez pas!
escape()
est défini dans la section B.2.1.2 escape et le texte d'introduction de l'annexe B dit:
... Toutes les fonctionnalités et comportements linguistiques spécifiés dans la présente annexe ont une ou plusieurs caractéristiques indésirables et, en l'absence d'utilisation héritée, seraient supprimés de cette spécification. ...
... Les programmeurs ne doivent pas utiliser ou supposer l'existence de ces fonctionnalités et comportements lors de l'écriture de nouveau code ECMAScript ....
Comportement:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
Les caractères spéciaux sont codés à l'exception de: @ * _ + -. /
La forme hexadécimale de caractères, dont la valeur unitaire du code est 0xFF ou moins, est une séquence d'échappement à deux chiffres: %xx
.
Pour les caractères avec une unité de code plus grande, le format à quatre chiffres %uxxxx
est utilisé. Ceci n'est pas autorisé dans une chaîne de requête (comme défini dans RFC3986 ):
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
Un signe de pourcentage n'est autorisé que s'il est directement suivi de deux chiffres hexadécimaux, le pourcentage suivi de u
n'est pas autorisé.
encodeURI ()
Utilisez encodeURI lorsque vous voulez une URL de travail. Faites cet appel:
encodeURI("http://www.example.org/a file with spaces.html")
obtenir:
http://www.example.org/a%20file%20with%20spaces.html
N'appelez pas encodeURIComponent car cela détruirait l'URL et retournerait
http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html
encodeURIComponent ()
Utilisez encodeURIComponent lorsque vous souhaitez coder la valeur d'un paramètre d'URL.
var p1 = encodeURIComponent("http://example.org/?a=12&b=55")
Ensuite, vous pouvez créer l'URL dont vous avez besoin:
var url = "http://example.net/?param1=" + p1 + "¶m2=99";
Et vous obtiendrez cette URL complète:
http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55¶m2=99
Notez que encodeURIComponent n'échappe pas au '
caractère. Un bogue courant consiste à l'utiliser pour créer des attributs html tels que href='MyUrl'
, qui pourraient subir un bogue d'injection. Si vous construisez du code HTML à partir de chaînes, utilisez "
au lieu de '
pour les guillemets d'attributs ou ajoutez une couche d'encodage supplémentaire ( '
peut être encodé en tant que% 27).
Pour plus d'informations sur ce type d'encodage, vous pouvez consulter: http://en.wikipedia.org/wiki/Percent-encoding
encodeURIComponent("var1=value1&var2=value2")
n'est pas le cas d'utilisation typique. Cet exemple encodera le=
et&
, ce qui n'est probablement pas ce qui était prévu!encodeURIComponent
est généralement appliqué séparément à la seule valeur de chaque paire de valeurs clés (la partie après chaque=
).