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/

1voto

d-_-b Punkte 19755
function htmlDecode(t){
   if (t) return $('<div />').html(t).text();
}

funktioniert wie ein Zauber

0 Stimmen

Text entfernt die html-Tags, aber $('<div />').html(t).html(); funktioniert

0voto

function htmlEscape(str) {
    var stringval="";
    $.each(str, function (i, element) {
        alert(element);
        stringval += element
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;')
            .replace(' ', '-')
            .replace('?', '-')
            .replace(':', '-')
            .replace('|', '-')
            .replace('.', '-');
    });
    alert(stringval);
    return String(stringval);
}

0voto

Eine für die Geschwindigkeit optimierte Version:

function escapeHtml(s) {
   let out = "";
   let p2 = 0;
   for (let p = 0; p < s.length; p++) {
      let r;
      switch (s.charCodeAt(p)) {
         case 34: r = "&quot;"; break;  // "
         case 38: r = "&amp;" ; break;  // &
         case 39: r = "&#39;" ; break;  // '
         case 60: r = '&lt;'  ; break;  // <
         case 62: r = '&gt;'  ; break;  // >
         default: continue;
      }
      if (p2 < p) {
         out += s.substring(p2, p);
      }
      out += r;
      p2 = p + 1;
   }
   if (p2 == 0) {
      return s;
   }
   if (p2 < s.length) {
      out += s.substring(p2);
   }
   return out;
}

const s = "Hello <World>!";
document.write(escapeHtml(s));
console.log(escapeHtml(s));

0voto

oscar castellon Punkte 2880

Für Escape-HTML-Sonderzeichen (UTF-8)

function htmlEscape(str) {
  return str
      .replace(/&/g, '&amp;')
      .replace(/"/g, '&quot;')
      .replace(/'/g, '&#39;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/\//g, '&#x2F;')
      .replace(/=/g,  '&#x3D;')
      .replace(/`/g, '&#x60;');
}

Für unescape html specials (UTF-8)

function htmlUnescape(str) {
  return str
      .replace(/&amp;/g, '&')
      .replace(/&quot;/g, '"')
      .replace(/&#39;/g, "'")
      .replace(/&lt;/g, '<')
      .replace(/&gt;/g, '>')
      .replace(/&#x2F/g, '/')
      .replace(/&#x3D;/g, '=')
      .replace(/&#x60;/g, '`');
}

-2voto

C Nimmanant Punkte 7

Alle Lösungen sind nutzlos, wenn man ein erneutes Entweichen nicht verhindert, z. B. würden die meisten Lösungen immer wieder entweichen & à &amp; .

escapeHtml = function (s) {
    return s ? s.replace(
        /[&<>'"]/g,
        function (c, offset, str) {
            if (c === "&") {
                var substr = str.substring(offset, offset + 6);
                if (/&(amp|lt|gt|apos|quot);/.test(substr)) {
                    // already escaped, do not re-escape
                    return c;
                }
            }
            return "&" + {
                "&": "amp",
                "<": "lt",
                ">": "gt",
                "'": "apos",
                '"': "quot"
            }[c] + ";";
        }
    ) : "";
};

4 Stimmen

Das wird als doppeltes Escaping bezeichnet und sollte behoben werden, indem Sie sicherstellen, dass Ihre Eingabedaten nicht bereits escaped sind. Was wäre, wenn Sie dem Benutzer buchstäblich < zeigen wollten? Oder wenn der Text an anderer Stelle wiederverwendet werden soll und Sie darauf angewiesen sind, dass das Escaping bereits erfolgt ist?

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