Wie der Titel schon sagt, möchte ich jedem Zeichen einer Zeichenfolge einen Backslash hinzufügen, unabhängig davon, ob die Zeichenfolge Sonderzeichen enthält oder nicht. Die Zeichenfolge sollte nicht als "sicher" eingestuft werden.

eg: 
let str = 'dj%^3&something';
str = str.replace(x, y);
// str = '\d\j\%\^\3\&\s\o\m\e\t\h\i\n\g'
-1
John James 17 Apr. 2018 im 21:23

4 Antworten

Beste Antwort

Wenn Sie nur eine Zeichenfolge sicher anzeigen möchten, sollten Sie Folgendes tun:

let str = 'dj%^3&something';
let node = document.createTextNode(str);
let dest = document.querySelector('.whatever');
dest.appendChild(node);

Und dann ist Ihnen garantiert, dass es als Text behandelt wird und kein Skript oder ähnliches ausführen kann.

Zum Beispiel: https://jsfiddle.net/s6udj03L/1/

2
dave 17 Apr. 2018 im 18:45

Wenn Sie kein neues string erstellen möchten und keinen regulären Ausdruck verwenden müssen, können Sie den vorhandenen einfach durchlaufen und vor jedem char ein \ platzieren. Beachten Sie, dass Sie \\ eingeben müssen, um dem ersten \ zu entkommen.

Um es als sicher zu betrachten, müssen Sie es irgendwie verschlüsseln. Sie können typische "nicht sichere" Zeichen wie in der folgenden Funktion encode() ersetzen. Beachten Sie, wie & durch & ersetzt wird

let str = 'dj%^3&something';
let out = "";
for(var i = 0; i < str.length; i++) {
  out += ("\\" + str[i]);
}
console.log(out);
console.log(encode(out));

function encode(string) {
    return String(string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}
0
Jimenemex 17 Apr. 2018 im 18:40

Sie können die Zeichenfolge in ein Array aufteilen, jedem Element des Arrays ein \ hinzufügen und das Array dann wieder mit der gewünschten Zeichenfolge verknüpfen.

var str = 'dj%^3&something';
var split = str.split(""); // split string into array
for (var i = 0; i < split.length; i++) {
    split[i] = '\\' + split[i]; // add backslash to each element in array
}
var joint = split.join('') // joint array to string

console.log(joint);
0
Patrick 17 Apr. 2018 im 18:32

Sie könnten jedes Zeichen in der Zeichenfolge mit (.) erfassen und \\$1 als Ersatz verwenden. Ich bin kein Experte, aber im Grunde wird \\ in \ und {{X4} gerendert. } wird auf alle (.) Erfassungen gerendert.

HIH

BEARBEITEN

Weitere Informationen finden Sie unter Wiktor Stribiżews Kommentar für eine Alternative, die weniger Codierung erfordert. Änderungen wie folgt:

str = str.replace(/(.)/g, '\\$1'); für str = str.replace(/./g, '\\$&');

Zum späteren Nachschlagen rate ich Ihnen dringend, regexr.com zu besuchen, wenn es um reguläre Ausdrücke geht. Es hat mir sehr geholfen

let str = 'dj%^3&something';
str = str.replace(/(.)/g, '\\$1');

console.log(str);
3
Scaramouche 17 Apr. 2018 im 18:34