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?

Rešitev

Oglejte si vgrajeni funkciji encodeURIComponent(str) in encodeURI(str).
V vašem primeru bi to moralo delovati:

var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);
Komentarji (9)

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 uporabiti escape ali encodeURIComponent, ne pa encodeURI.

Za nadaljnjo razpravo glejte vprašanje Najboljša praksa: escape ali encodeURI / encodeURIComponent v Stack Overflow.

Komentarji (10)

Uporabite encodeURIComponent(). Funkcija encodeURI() 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() in encodeURIComponent() najdete drugje. Če želite nekaj zakodirati tako, da se lahko varno vključi kot sestavni del URI (npr. kot parameter niza poizvedb), uporabite encodeURIComponent().

Komentarji (0)