解码JavaScript字符串中包含转义序列的十六进制
我有一个JS格式的字符串: http\x3a\x2f\x2fwww.url.com 我怎样才能从中得到解码的字符串?我尝试了unescape(),string.decode,但它无法对其进行解码。如果我在浏览器中显示该编码字符串,它看起来很好(http://www.url.com),但我想在显示此字符串之前对其进行操作 谢谢。如果您已经:解码JavaScript字符串中包含转义序列的十六进制,javascript,Javascript,我有一个JS格式的字符串: http\x3a\x2f\x2fwww.url.com 我怎样才能从中得到解码的字符串?我尝试了unescape(),string.decode,但它无法对其进行解码。如果我在浏览器中显示该编码字符串,它看起来很好(http://www.url.com),但我想在显示此字符串之前对其进行操作 谢谢。如果您已经: var encodedString = "http\x3a\x2f\x2fwww.url.com"; 然后,手动解码字符串是不必要的。JavaScript解
var encodedString = "http\x3a\x2f\x2fwww.url.com";
然后,手动解码字符串是不必要的。JavaScript解释器已经在为您解码转义序列,事实上,双重转义可能会导致您的脚本无法正确处理某些字符串。相反,如果您有:
var encodedString = "http\\x3a\\x2f\\x2fwww.url.com";
这些反斜杠将被认为是转义的(因此十六进制转义序列保持未编码),所以继续读取
这种情况下最简单的方法是使用eval
函数,该函数将其参数作为JavaScript代码运行并返回结果:
var decodedString = eval('"' + encodedString + '"');
这是因为\x3a
是有效的JavaScript字符串转义代码。但是,如果字符串不是来自您的服务器,请不要这样做;如果是这样,您将创建一个新的安全弱点,因为eval
可用于执行任意JavaScript代码
更好(但不那么简洁)的方法是使用JavaScript的字符串替换方法创建有效的JSON,然后使用浏览器的JSON解析器解码生成的字符串:
var decodedString = JSON.parse('"' + encodedString.replace(/([^\\]|^)\\x/g, '$1\\u00') + '"');
// or using jQuery
var decodedString = $.parseJSON('"' + encodedString.replace(/([^\\]|^)\\x/g, '$1\\u00') + '"');
这里没有什么可解码的
\xNN
是JavaScript中的转义字符,表示代码为NN的字符。转义字符只是一种指定字符串的方式——当它被解析时,它已经被“解码”,这就是为什么它在浏览器中显示良好
当您这样做时:
var str = 'http\x3a\x2f\x2fwww.url.com';
它在内部存储为
http://www.url.com
。您可以直接进行操作。您可以编写自己的替换方法:
String.prototype.decodeEscapeSequence = function() {
return this.replace(/\\x([0-9A-Fa-f]{2})/g, function() {
return String.fromCharCode(parseInt(arguments[1], 16));
});
};
"http\\x3a\\x2f\\x2fwww.example.com".decodeEscapeSequence()
也许这有助于:
你不需要破译它。您可以按原样安全地操作它:
var str = "http\x3a\x2f\x2fwww.url.com";
alert(str.charAt(4)); // :
alert("\x3a" === ":"); // true
alert(str.slice(0,7)); // http://
2019
你可以用也可以不用
console.log(
decodeURI('http\x3a\x2f\x2fwww.url.com')
)
对于现代Javascript实现,最好使用以下函数之一:
- :及其intedend可用于部分URI,但仍可用于解码完整URI
- :用于解码完整URI
consturiencoded='http\x3a\x2f\x2fwww.url.com'
log('decodeURIComponent:',decodeURIComponent(uriEncoded));
log('decodeURI:',decodeURI(uriEncoded))代码>完美!我使用node.js对使用这些十六进制转义序列的nginx日志进行解码。var a='http\x3a\x2f\x2fwwww.url.com';日志(a)打印一个正常的url。。decodeURI不适用于此编码。
var str = "http\x3a\x2f\x2fwww.url.com";
alert(str.charAt(4)); // :
alert("\x3a" === ":"); // true
alert(str.slice(0,7)); // http://