
Siger
Ich habe eine Zeichenfolge in JS in diesem Format:
http\x3a\x2f\x2fwww.url.com
Wie bekomme ich die decodierte Zeichenfolge daraus? Ich habe unescape(), string.decode ausprobiert, aber es dekodiert dies nicht. Wenn ich diese codierte Zeichenfolge im Browser anzeige, sieht sie gut aus (http://www.url.com), aber ich möchte diese Zeichenfolge bearbeiten, bevor ich sie zeige.
Danke.
Sie könnten Ihre eigene Ersetzungsmethode schreiben:
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()
Hier gibt es nichts zu entschlüsseln. \xNN
ist ein Escape-Zeichen in JavaScript, das das Zeichen mit dem Code NN bezeichnet. Ein Escape-Zeichen ist einfach eine Möglichkeit, eine Zeichenfolge anzugeben – wenn es geparst wird, ist es bereits “dekodiert”, weshalb es im Browser gut angezeigt wird.
Wenn Sie das tun:
var str="http\x3a\x2f\x2fwww.url.com";
es wird intern gespeichert als http://www.url.com
. Sie können dies direkt manipulieren.

Bitte stehen
Wenn Sie bereits haben:
var encodedString = "http\x3a\x2f\x2fwww.url.com";
Dann Das manuelle Decodieren der Zeichenfolge ist nicht erforderlich. Der JavaScript-Interpreter würde die Escape-Sequenzen bereits für Sie dekodieren, und tatsächlich kann doppeltes Aufheben der Escape-Zeichen dazu führen, dass Ihr Skript mit einigen Zeichenfolgen nicht richtig funktioniert. Wenn Sie dagegen:
var encodedString = "http\\x3a\\x2f\\x2fwww.url.com";
Diese Backslashes würden als Escapezeichen betrachtet (daher bleiben die Hex-Escape-Sequenzen uncodiert), also lesen Sie weiter.
Der einfachste Weg in diesem Fall ist die Verwendung von eval
Funktion, die ihr Argument als JavaScript-Code ausführt und das Ergebnis zurückgibt:
var decodedString = eval('"' + encodedString + '"');
Das funktioniert, weil \x3a
ist ein gültiger JavaScript-String-Escape-Code. Tun Sie es jedoch nicht auf diese Weise wenn der String nicht von Ihrem Server kommt; Wenn ja, würden Sie eine neue Sicherheitslücke schaffen, weil eval
kann verwendet werden, um beliebigen JavaScript-Code auszuführen.
Ein besserer (aber weniger prägnanter) Ansatz wäre dann die Verwendung der String-Replace-Methode von JavaScript, um gültiges JSON zu erstellen Verwenden Sie den JSON-Parser des Browsers um die resultierende Zeichenfolge zu decodieren:
var decodedString = JSON.parse('"' + encodedString.replace(/([^\\]|^)\\x/g, '$1\\u00') + '"');
// or using jQuery
var decodedString = $.parseJSON('"' + encodedString.replace(/([^\\]|^)\\x/g, '$1\\u00') + '"');
Sie müssen es nicht entschlüsseln. Sie können es sicher manipulieren, wie es ist:
var str = "http\x3a\x2f\x2fwww.url.com";
alert(str.charAt(4)); // :
alert("\x3a" === ":"); // true
alert(str.slice(0,7)); // http://
vielleicht hilft das: 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;
}

Илья Зеленько
2019
Sie können verwenden decodeURI oder decodeURIComponent und nicht nicht entkommen.
console.log(
decodeURI('http\x3a\x2f\x2fwww.url.com')
)
9973400cookie-checkDekodieren von Hex-enthaltenden Escape-Sequenzen in JavaScript-Stringsyes