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?
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);
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.
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()
.