Miten voit koodata URL-osoitteen turvallisesti JavaScriptillä niin, että se voidaan laittaa GET-merkkijonoon?
var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;
Oletan, että sinun täytyy koodata myUrl
-muuttuja tuolla toisella rivillä?
Tutustu sisäänrakennettuihin funktioihin encodeURIComponent(str) ja encodeURI(str).
Sinun tapauksessasi tämän pitäisi toimia:
var myOtherUrl =
"http://example.com/index.html?url=" + encodeURIComponent(myUrl);
Sinulla on kolme vaihtoehtoa:
escape()
ei koodaa: @*/+
encodeURI()
ei koodaa: ~!@#$&*()=:/,;?+'
encodeURIComponent()
ei koodaa: ~!*()'
Mutta sinun tapauksessasi, jos haluat siirtää URL toisen sivun GET
-parametriin, sinun pitäisi käyttää escape
tai encodeURIComponent
, mutta ei encodeURI
.
Katso Stack Overflow -kysymys Paras käytäntö: escape vai encodeURI / encodeURIComponentti, jossa käsitellään asiaa tarkemmin.
Käytä encodeURIComponent()
. Funktio encodeURI()
ei vaivaudu koodaamaan monia merkkejä, joilla on semanttista merkitystä URL-osoitteissa (esim. "#", "?" ja "&"). escape()
on vanhentunut, eikä se vaivaudu koodaamaan "+" -merkkejä, jotka tulkitaan palvelimella koodatuiksi välilyönneiksi (ja kuten muut täällä ovat huomauttaneet, se ei koodaa oikein muita kuin ASCII-merkkejä).
Muualla on mukava selitys encodeURI()
:n ja encodeURIComponent()
:n erosta. Jos haluat koodata jotain niin, että se voidaan turvallisesti sisällyttää URI:n komponentiksi (esim. kyselymerkkijonon parametriksi), kannattaa käyttää encodeURIComponent()
.