Codificare l'URL in JavaScript?

Come si codifica in modo sicuro un URL usando JavaScript in modo che possa essere messo in una stringa GET?

var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;

Suppongo che tu debba codificare la variabile myUrl in quella seconda linea?

Soluzione

Controlla la funzione integrata encodeURIComponent(str) e encodeURI(str).
Nel tuo caso, questo dovrebbe funzionare:

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

Avete tre opzioni:

  • escape() non codifica: @*/+

  • encodeURI() non codifica: ~!@#$&*()=:/,;?+'

  • encodeURIComponent() non codifica: ~!*()'

Ma nel tuo caso, se vuoi passare un URL in un parametro GET di un'altra pagina, dovresti usare escape o encodeURIComponent, ma non encodeURI.

Vedi la domanda di Stack Overflow Best practice: escape, o encodeURI / encodeURIComponent per ulteriori discussioni.

Commentari (10)

Continuate con encodeURIComponent(). La funzione encodeURI() non si preoccupa di codificare molti caratteri che hanno importanza semantica negli URL (ad esempio "#", "?", e "&"). escape() è deprecato, e non si preoccupa di codificare i caratteri "+", che saranno interpretati come spazi codificati sul server (e, come sottolineato da altri qui, non codifica correttamente i caratteri non-ASCII negli URL).

C'è una bella spiegazione della differenza tra encodeURI() e encodeURIComponent() altrove. Se si vuole codificare qualcosa in modo che possa essere incluso in modo sicuro come componente di un URI (ad esempio come parametro di una stringa di query), si vuole usare encodeURIComponent().

Commentari (0)