Si ya tiene:
var encodedString = "http\x3a\x2f\x2fwww.url.com";
Entonces al descodificar la cadena manual es innecesaria. El intérprete de JavaScript ya estaría decodificando las secuencias de escape para usted, y de hecho, el doble desencolado puede hacer que su secuencia de comandos no funcione correctamente con algunas cadenas. Si, por el contrario, tiene:
var encodedString = "http\\x3a\\x2f\\x2fwww.url.com";
Esas barras invertidas serían considerados escaparon (por lo tanto, las secuencias de escape hexagonal permanecen sin codificar), así que sigue leyendo.
La manera más fácil en ese caso es utilizar la función de eval
, que se extiende su argumento como código JavaScript y devuelve el resultado:
var decodedString = eval('"' + encodedString + '"');
Esto funciona porque \x3a
es un código de escape de cadenas válidas JavaScript. Sin embargo, no lo haga de esta manera si la cadena no proviene de su servidor; de ser así, estarías creando una nueva debilidad de seguridad porque eval
se puede usar para ejecutar código JavaScript arbitrario.
Un mejor enfoque (pero menos concisa) sería el uso de la cadena de JavaScript reemplazar método para crear JSON válido, entonces usar JSON analizador del navegador para decodificar la cadena resultante:
var decodedString = JSON.parse('"' + encodedString.replace(/([^\\]|^)\\x/g, '$1\\u00') + '"');
// or using jQuery
var decodedString = $.parseJSON('"' + encodedString.replace(/([^\\]|^)\\x/g, '$1\\u00') + '"');
perfecto! Estaba usando node.js para decodificar registros nginx que usan estas secuencias de escape hexagonal. –