Hogyan lehet biztonságosan kódolni egy URL-címet JavaScript segítségével úgy, hogy az egy GET-stringbe kerülhessen?
var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;
Feltételezem, hogy a második sorban a myUrl
változót kell kódolnod?
Nézze meg a beépített encodeURIComponent(str) és encodeURI(str) függvényeket.
Az Ön esetében ennek működnie kell:
var myOtherUrl =
"http://example.com/index.html?url=" + encodeURIComponent(myUrl);
Három lehetősége van:
nem kódol: @*/+
Az encodeURI()
nem kódolja: ~!@#$&*()=:/,;?+'
Az encodeURIComponent()
nem kódol: ~!*()'
De a te esetedben, ha egy URL-t akarsz átadni egy másik oldal GET
paraméterébe, akkor az escape
-t vagy az encodeURIComponent
-t kell használnod, de az encodeURI
-t nem.
Lásd a Stack Overflow kérdését Legjobb gyakorlat: escape, vagy encodeURI / encodeURIComponent a további megbeszélésért.
Maradj a encodeURIComponent()
mellett. A encodeURI()
függvény nem foglalkozik az URL-ekben szemantikai jelentőséggel bíró karakterek kódolásával (pl. "#", "?" és "&"). Az escape()
elavult, és nem foglalkozik a "+" karakterek kódolásával, amelyeket a szerver kódolt szóközként fog értelmezni (és, ahogy itt mások is rámutattak, nem kódolja megfelelően a nem ASCII karaktereket).
Van egy szép magyarázat a encodeURI()
és encodeURIComponent()
közötti különbségről máshol. Ha valamit úgy akarsz kódolni, hogy az biztonságosan szerepelhessen egy URI összetevőjeként (pl. lekérdezési karakterlánc paraméterként), akkor a encodeURIComponent()
funkciót kell használnod.