658 Stimmen

HTML-Zeichenfolgen mit jQuery umbrechen

Kennt jemand eine einfache Möglichkeit, HTML aus Strings in jQuery ? Ich muss in der Lage sein, eine beliebige Zeichenfolge zu übergeben und haben es richtig für die Anzeige in einer HTML-Seite (Verhinderung von JavaScript/HTML-Injection-Angriffe) escaped. Ich bin sicher, es ist möglich, jQuery zu erweitern, um dies zu tun, aber ich weiß nicht genug über das Framework im Moment, um dies zu erreichen.

0 Stimmen

Siehe auch Perf: jsperf.com/

662voto

Tom Gruner Punkte 9445

Außerdem gibt es die Lösung aus mustache.js

var entityMap = {
  '&': '&',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;',
  '/': '&#x2F;',
  '`': '&#x60;',
  '=': '&#x3D;'
};

function escapeHtml (string) {
  return String(string).replace(/[&<>"'`=\/]/g, function (s) {
    return entityMap[s];
  });
}

0 Stimmen

Sorry zu stören, aber gibt es irgendwie kann dies rückgängig gemacht werden? ich weiß nicht, regex so ich brauche Hilfe

488voto

travis Punkte 34588

Da Sie die jQuery können Sie einfach den Wert des Elements text Eigentum:

// before:
// <div class="someClass">text</div>
var someHtmlString = "<script>alert('hi!');</script>";

// set a DIV's text:
$("div.someClass").text(someHtmlString);
// after: 
// <div class="someClass">&lt;script&gt;alert('hi!');&lt;/script&gt;</div>

// get the text in a string:
var escaped = $("<div>").text(someHtmlString).html();
// value: 
// &lt;script&gt;alert('hi!');&lt;/script&gt;

1 Stimmen

Ist es sicher? linkedin.com/pulse/

0 Stimmen

@paaacman Einstellung der Eigenschaft mit jQuery unter Verwendung von .text() o .attr() ist sicher, aber bei der Erstellung einer HTML-Zeichenkette wie in diesem Beispiel würden Sie definitiv auf Probleme stoßen.

185voto

Henrik N Punkte 14805
$('<div/>').text('This is fun & stuff').html(); // "This is fun &amp; stuff"

Fuente: http://debuggable.com/posts/encode-html-entities-with-jquery:480f4dd6-13cc-4ce9-8071-4710cbdd56cb

12 Stimmen

Wie in der obigen Antwort erwähnt, ist bei dieser Lösung nicht gewährleistet, dass Leerzeichen erhalten bleiben.

61voto

tghw Punkte 24707

Wenn Sie für HTML flüchten wollen, gibt es nur drei, die wirklich notwendig sind:

html.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");

Je nach Anwendungsfall müssen Sie möglicherweise auch Dinge tun wie " à &quot; . Wenn die Liste groß genug ist, würde ich einfach ein Array verwenden:

var escaped = html;
var findReplace = [[/&/g, "&amp;"], [/</g, "&lt;"], [/>/g, "&gt;"], [/"/g, "&quot;"]]
for(var item in findReplace)
    escaped = escaped.replace(findReplace[item][0], findReplace[item][1]);

encodeURIComponent() wird nur für URLs, nicht für HTML, entschlüsselt.

14 Stimmen

Dieser reguläre Ausdruck führt zu seltsamen Ergebnissen, wenn der betreffende HTML-Code bereits maskierte Elemente enthält. Zum Beispiel wird das Escapen von "Tom & Jerry" zu "Tom & Jerry" führen.

12 Stimmen

Bitte verwenden Sie var zu deklarieren item lokal; verwenden Sie jedenfalls keine for … in Schleife beim Durchlaufen eines Arrays überhaupt nicht! Verwenden Sie eine gewöhnliche for stattdessen eine Schleife. Oh, und es ist encodeURIComponent , nicht escapeURIComponent .

3 Stimmen

Wenn Sie mit Tag-Attributen arbeiten, müssen Sie auch Anführungszeichen und/oder doppelte Anführungszeichen vermeiden. Die PHP-Dokumentation für htmlspecialchars enthält eine nützliche Liste der Konvertierungen, die es durchführt. php.net/htmlspecialchars

43voto

chovy Punkte 64969

Es ist einfach, einen Unterstrich zu verwenden:

_.escape(string) 

Unterstrich ist eine Hilfsbibliothek, die viele Funktionen bietet, die native js nicht bietet. Es gibt auch lodash die die gleiche API wie underscore ist, aber umgeschrieben wurde, um leistungsfähiger zu sein.

2 Stimmen

Und die Umkehrung lautet _.unescape(string) .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X