Kodiranje URL v JavaScript?
Kako varno kodirati naslov URL z uporabo JavaScripta, da ga je mogoče vnesti v niz GET?
var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;
Predvidevam, da morate kodirati spremenljivko myUrl
v tej drugi vrstici?
2385
3
Oglejte si vgrajeni funkciji encodeURIComponent(str) in encodeURI(str).
V vašem primeru bi to moralo delovati:
Na voljo imate tri možnosti:
escape()
ne kodira:@*/+
encodeURI()
ne kodira:~!@#$&*()=:/,;?+'
encodeURIComponent()
ne kodira:~!*()'
Toda v vašem primeru, če želite posredovati URL v parameter
GET
druge strani, morate uporabitiescape
aliencodeURIComponent
, ne paencodeURI
.Za nadaljnjo razpravo glejte vprašanje Najboljša praksa: escape ali encodeURI / encodeURIComponent v Stack Overflow.
Uporabite
encodeURIComponent()
. FunkcijaencodeURI()
se ne trudi kodirati številnih znakov, ki so v URL-jih semantično pomembni (npr. "#", "?" in "&").escape()
je zastarel in ne poskuša kodirati znakov "+", ki jih bo strežnik razumel kot kodirane presledke (in, kot so opozorili drugi, ne kodira pravilno znakov URL, ki niso ASCII).Lepo razlago razlike med funkcijama
encodeURI()
inencodeURIComponent()
najdete drugje. Če želite nekaj zakodirati tako, da se lahko varno vključi kot sestavni del URI (npr. kot parameter niza poizvedb), uporabiteencodeURIComponent()
.