online decodeuri attribute javascript html forms decoding url-parameters

javascript - decodeuri - html title attribute



Decodificación de parámetros de URL con JavaScript (5)

Creé mis propios métodos de cadena para admitir la codificación / decodificación necesaria. Estos métodos manejarán correctamente la codificación + y la descodificación, lo que le permitirá tener más (+) en su cadena y aún tener los espacios originales codificados como + ''s.

String.prototype.plusEncode = function() { return encodeURIComponent(this).replace(//%20/gm,"+"); } String.prototype.plusDecode = function() { return decodeURIComponent(this.replace(//+/gm,"%20")); }

Esta debería ser una tarea simple, pero parece que no puedo encontrar una solución.

Tengo una cadena básica que se pasa como un parámetro de cadena de consulta como este: This+is+a+message+with+spaces . Me gustaría decodificar ese parámetro usando Javascript para This is a message with spaces , pero parece que no puedo decodificarlo.

Intenté decodeURI(''This+is+a+message+with+spaces'') pero el resultado aún contiene los signos + .

Cualquier ayuda sería apreciada. ¡Gracias!


El signo más no está codificado / decodificado. Para ver que la función de decodificación funciona, primero debe pasar un URI codificado. Echar un vistazo:

encodeURI( "http://www.foo.com/bar?foo=foo bar jar" )

Generará: http://www.foo.com/bar?foo=foo%20bar%20jar , es decir, el URI codificado.

decodeURI( "http://www.foo.com/bar?foo=foo%20bar%20jar" )

Generará: http://www.foo.com/bar?foo=foo bar jar , es decir, el URI descodificado.


El siguiente código decodificará y le dará los params en forma de objetos

export function getParamsFromUrl(url) { url = decodeURI(url); if (typeof url === ''string'') { let params = url.split(''?''); let eachParamsArr = params[1].split(''&''); let obj = {}; if (eachParamsArr && eachParamsArr.length) { eachParamsArr.map(param => { let keyValuePair = param.split(''='') let key = keyValuePair[0]; let value = keyValuePair[1]; obj[key] = value; }) } return obj; } }


Sí, es cierto que la función decodeURIComponent no convierte + al espacio. Entonces debes reemplazar la función de + usar reemplazo.

Lo ideal es que la siguiente solución funcione.

var str_name = ''This+is+a+message+with+spaces''; decodeURIComponent((str_name + '''').replace(//+/g, ''%20''));


Como ya se señaló, la función decodeURI no convierte + al espacio, pero hay algunas cosas que vale la pena realizar aquí:
  • decodeURI está destinado a ser utilizado para URI completo, es decir, no decodifica separadores como ? , & , = , + , etc.
  • para decodificar los parámetros decodeURIComponent debe usar
    (Vale la pena echarle un vistazo a: ¿Cuál es la diferencia entre decodeURIComponent y decodeURI? )
  • la cadena que está intentando decodificar podría contener + codificación como %2B , por lo tanto, no debería reemplazar + después de la conversión, ya que podría perder + signos de que realmente desea allí, p. ej. something?num=%2B632+905+123+4567 debe convertirse:
    something?num=+632 905 123 4567
    ya que probablemente va a extraer el número: +632 905 123 4567

Entonces la forma correcta de hacer esto es:

var str = ''something?num=%2B632+905+123+4567''; decodeURIComponent( str.replace(//+/g, ''%20'') );