我在这个格式的JS中有一个字符串:
HTTP\X3A\X2F\x2fwww.url.com
如何从中获取解码后的字符串?我尝试了unescape(),string.decode,但它没有对此进行解码.如果我在浏览器中显示该编码字符串它看起来很好(http://www.url.com),但我想在显示它之前操纵该字符串.
谢谢.
Gum*_*mbo 18
您可以编写自己的替换方法:
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()
Run Code Online (Sandbox Code Playgroud)
cas*_*nca 10
这里无需解码.\xNN是JavaScript中的转义字符,表示代码为NN的字符.转义字符只是一种指定字符串的方式 - 当它被解析时,它已经被"解码",这就是它在浏览器中显示正常的原因.
当你这样做时:
var str = 'http\x3a\x2f\x2fwww.url.com';
Run Code Online (Sandbox Code Playgroud)
它在内部存储为http://www.url.com.你可以直接操纵它.
如果您已经拥有:
var encodedString = "http\x3a\x2f\x2fwww.url.com";
Run Code Online (Sandbox Code Playgroud)
那么就不需要手动解码字符串了。JavaScript 解释器已经为您解码了转义序列,事实上,双重转义可能会导致您的脚本无法正确处理某些字符串。相反,如果您有:
var encodedString = "http\\x3a\\x2f\\x2fwww.url.com";
Run Code Online (Sandbox Code Playgroud)
这些反斜杠将被视为转义(因此十六进制转义序列保持未编码),因此请继续阅读。
在这种情况下,最简单的方法是使用该eval函数,该函数将其参数作为 JavaScript 代码运行并返回结果:
var decodedString = eval('"' + encodedString + '"');
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为\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') + '"');
Run Code Online (Sandbox Code Playgroud)
您不需要解码它.您可以安全地操作它:
var str = "http\x3a\x2f\x2fwww.url.com";
?alert(str.charAt(4)); // :
alert("\x3a" === ":"); // true
alert(str.slice(0,7))?; // http://
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32294 次 |
| 最近记录: |