Ich möchte einen Text in HTML durch eine Javascript-Funktion anzeigen. Wie kann ich HTML-Sonderzeichen in JS umgehen? Gibt es eine API?
javascript
html
fernando123
quelle
quelle
Antworten:
quelle
replace()
Anrufen sind unnötig. Einfache alte Einzelzeichenfolgen würden genauso gut funktionieren.quelle
Sie können die
.text()
Funktion von jQuery verwenden .Beispielsweise:
http://jsfiddle.net/9H6Ch/
Aus der jQuery-Dokumentation zur
.text()
Funktion:In früheren Versionen der jQuery-Dokumentation wurde dies folgendermaßen formuliert ( Hervorhebung hinzugefügt ):
quelle
const str = "foo<>'\"&";
$('<div>').text(str).html()
foo<>'"&
Ich glaube, ich habe den richtigen Weg gefunden ...
quelle
document.createTextNode("<script>alert('Attack!')</script>").textContent
Mit lodash
Quellcode
quelle
Dies ist bei weitem der schnellste Weg, den ich je gesehen habe. Außerdem wird alles erledigt, ohne Elemente auf der Seite hinzuzufügen, zu entfernen oder zu ändern.
quelle
var divCode = '<div data-title="' + escapeHTML('Jerry "Bull" Winston') + '">Div content</div>'
ergibt ungültiges HTML!Es war interessant, eine bessere Lösung zu finden:
Ich analysiere nicht,
>
weil es XML / HTML-Code im Ergebnis nicht bricht.Hier sind die Benchmarks: http://jsperf.com/regexpairs Außerdem habe ich eine universelle
escape
Funktion erstellt: http://jsperf.com/regexpairs2quelle
Die prägnanteste und performanteste Möglichkeit, nicht codierten Text anzuzeigen, ist die Verwendung von
textContent
Eigenschaften.Schneller als mit
innerHTML
. Und das ohne Berücksichtigung des Overheads.quelle
</
ist.DOM-Elemente unterstützen die Konvertierung von Text in HTML durch Zuweisung zu innerText . innerText ist keine Funktion, aber die Zuweisung funktioniert so, als ob der Text maskiert wäre.
quelle
<br>
Elemente anstelle von Zeilenumbrüchen hinzugefügt, die bestimmte Elemente wie Stile oder Skripte beschädigen können. DascreateTextNode
ist nicht anfällig für dieses Problem.innerText
hat einige Legacy- / Spezifikationsprobleme. Besser zu benutzentextContent
.Sie können jedes Zeichen in Ihrer Zeichenfolge codieren:
Oder zielen Sie einfach auf die Hauptfiguren, über die Sie sich Sorgen machen möchten (&, Inebreaks, <,>, "und '), wie:
quelle
Ein Einzeiler (für ES6 +):
Für ältere Versionen:
quelle
Ist beim Erstellen einer DOM-Struktur auf dieses Problem gestoßen. Diese Frage hat mir geholfen, sie zu lösen. Ich wollte einen Doppel-Chevron als Pfadtrennzeichen verwenden, aber das Anhängen eines neuen Textknotens führte direkt dazu, dass der maskierte Zeichencode angezeigt wurde und nicht das Zeichen selbst:
quelle
Wenn Sie bereits Module in Ihrer App verwenden, können Sie das Escape-HTML- Modul verwenden.
quelle
Versuchen Sie dies mithilfe der
prototype.js
Bibliothek:Probieren Sie eine Demo aus
quelle
Ich habe diese Lösung gefunden.
Nehmen wir an, wir möchten dem Element HTML mit unsicheren Daten des Benutzers oder der Datenbank hinzufügen.
Es ist unsicher gegen XSS-Angriffe. Fügen Sie dies nun hinzu.
So ist es
Für mich ist das viel einfacher als zu benutzen
.replace()
und es wird entfernt !!! alle möglichen HTML-Tags (hoffe ich).quelle
<script>
in<script>
.