我在JS中有一个字符串格式:
HTTP \ X3A \ X2F \ x2fwww.url.com
如何从中获取解码后的字符串?我尝试了unescape(),string.decode,但它没有对此进行解码。如果我在浏览器中显示该编码字符串它看起来很好(http://www.url.com),但我想在显示它之前操纵该字符串。
感谢。
答案 0 :(得分:17)
您可以编写自己的替换方法:
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()
答案 1 :(得分:10)
此处无需解码。 \xNN
是JavaScript中的转义字符,表示代码为NN的字符。转义字符只是一种指定字符串的方式 - 解析时,它已被“解码”,这就是它在浏览器中显示的原因。
当你这样做时:
var str = 'http\x3a\x2f\x2fwww.url.com';
它内部存储为http://www.url.com
。你可以直接操纵它。
答案 2 :(得分:5)
您无需解码它。你可以安全地操纵它:
var str = "http\x3a\x2f\x2fwww.url.com";
alert(str.charAt(4)); // :
alert("\x3a" === ":"); // true
alert(str.slice(0,7)); // http://
答案 3 :(得分:2)
如果您已经拥有:
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') + '"');
答案 4 :(得分:1)
也许这会有所帮助:http://cass-hacks.com/articles/code/js_url_encode_decode/
function URLDecode (encodedString) {
var output = encodedString;
var binVal, thisString;
var myregexp = /(%[^%]{2})/;
while ((match = myregexp.exec(output)) != null
&& match.length > 1
&& match[1] != '') {
binVal = parseInt(match[1].substr(1),16);
thisString = String.fromCharCode(binVal);
output = output.replace(match[1], thisString);
}
return output;
}
答案 5 :(得分:1)
您可以使用decodeURI或decodeURIComponent而不是unescape。
console.log(
decodeURI('http\x3a\x2f\x2fwww.url.com')
)
答案 6 :(得分:0)
对于现代Javascript实现,最好使用以下功能之一:
两者的有效代码段:
const uriEncoded = 'http\x3a\x2f\x2fwww.url.com'
console.log('decodeURIComponent: ', decodeURIComponent(uriEncoded));
console.log('decodeURI: ', decodeURI(uriEncoded));