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''));
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'') );