2454 votos

Cómo codificar una URL en JavaScript?

¿Cómo de forma segura codificar una URL con JavaScript de manera tal que puede ser puesto en un GET string?

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

Supongo que usted necesita para codificar myUrl variable en esa segunda línea?

2780voto

Buu Nguyen Puntos 19391

Echa un vistazo a la función incorporada encodeURIComponent(str) y encodeURI(str).
En su caso, esto debería funcionar:

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

1513voto

CMS Puntos 315406

Usted tiene tres opciones:

  • escape() no va a codificar: @*/+

  • encodeURI() no va a codificar: ~!@#$&*()=:/,;?+'

  • encodeURIComponent() no va a codificar: ~!*()'

Pero en tu caso, si quieres pasar una URL en un GET parámetro de otra página, debes usar escape o encodeURIComponent, pero no encodeURI.

Ver Stack Overflow pregunta Mejor práctica: escape, o encodeURI / encodeURIComponent para continuar el debate.

179voto

Mike Brennan Puntos 1384

Con el palo encodeURIComponent(). La función encodeURI() no molesta para codificar muchos de los personajes que han semántica de importancia en la Url (ej. "#", "?", y "&"). escape() está en desuso, y no molesta para codificar los caracteres"+", que será interpretado como codificado espacios en el servidor (y, como se ha señalado por otros aquí, no es propiamente URL-encode caracteres no ASCII).

Hay una buena explicación de la diferencia entre los encodeURI() y encodeURIComponent() en otros lugares. Si desea codificar algo a fin de que pueda ser incluido como un componente de un URI (por ej. como un parámetro de cadena de consulta), desea utilizar encodeURIComponent().

83voto

Ryan Taylor Puntos 450

Personalmente, me parece que muchos Api desea reemplazar " " con "+" de modo que yo uso lo siguiente:

encodeURIComponent(value).replace(/%20/g,'+')

escape se implementa de forma diferente en distintos navegadores y encodeURI no codificar la mayoría de los personajes que son funcionales en un URI (como#, e incluso /) -- está hecho para ser utilizado en un completo URI/URL sin que se rompa.

40voto

Maksym Kozlenko Puntos 4557

Si usted está usando jQuery, me iría a por $.param método. Lo URL codifica un objeto de asignación de los campos de valores, que es más fácil de leer que una llamada a un método escape en cada valor.

$.param({a:"1=2", b:"Test 1"}) // gets a=1%3D2&b=Test+1

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X