Der jQuery-Trick codiert keine Anführungszeichen und entfernt im IE Ihre Leerzeichen.
Basierend auf dem Escape- Templatetag in Django, das meiner Meinung nach bereits stark genutzt / getestet wird, habe ich diese Funktion erstellt, die das tut, was benötigt wird.
Es ist wohl einfacher (und möglicherweise schneller) als alle Problemumgehungen für das Problem mit dem Leerzeichen-Stripping - und es codiert Anführungszeichen, was wichtig ist, wenn Sie das Ergebnis beispielsweise in einem Attributwert verwenden möchten.
function htmlEscape(str) {
return str
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
// I needed the opposite function today, so adding here too:
function htmlUnescape(str){
return str
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&');
}
Update 2013-06-17:
Auf der Suche nach dem schnellsten Fluchtweg habe ich diese Implementierung einer replaceAll
Methode gefunden:
http://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(auch hier referenziert: Am schnellsten Methode zum Ersetzen aller Instanzen eines Zeichens in einer Zeichenfolge )
Einige Leistungsergebnisse hier:
http://jsperf.com/htmlencoderegex/25
Es gibt den oben eingebauten replace
Ketten eine identische Ergebniszeichenfolge . Ich würde mich sehr freuen, wenn jemand erklären könnte, warum es schneller geht!?
Update 04.03.2015:
Ich habe gerade festgestellt, dass AngularJS genau die oben beschriebene Methode verwendet:
https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
Sie fügen einige Verbesserungen hinzu - sie scheinen ein obskures Unicode-Problem zu behandeln und alle nicht alphanumerischen Zeichen in Entitäten zu konvertieren. Ich hatte den Eindruck, dass Letzteres nicht erforderlich war, solange Sie einen UTF8-Zeichensatz für Ihr Dokument angegeben haben.
Ich werde feststellen, dass (4 Jahre später) Django immer noch keines dieser Dinge tut, daher bin ich mir nicht sicher, wie wichtig sie sind:
https://github.com/django/django/blob/1.8b1/django/utils /html.py#L44
Update 06.04.2016:
Möglicherweise möchten Sie auch dem Schrägstrich entkommen /
. Dies ist für die korrekte HTML-Codierung nicht erforderlich, wird jedoch von OWASP als Anti-XSS-Sicherheitsmaßnahme empfohlen . (Danke an @JNF für den Vorschlag in den Kommentaren)
.replace(/\//g, '/');