Ich habe eine winzige kleine Funktion geschrieben, die dies tut. Es entgeht nur "
, &
, <
und >
(aber in der Regel das ist alles , was Sie brauchen sowieso). Es ist etwas eleganter als die zuvor vorgeschlagenen Lösungen, da nur eine .replace()
für die gesamte Konvertierung verwendet wird. ( BEARBEITEN 2: Reduzierte Codekomplexität, wodurch die Funktion noch kleiner und übersichtlicher wird. Wenn Sie neugierig auf den Originalcode sind, lesen Sie das Ende dieser Antwort.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
Dies ist einfaches Javascript, es wird keine jQuery verwendet.
Flucht /
und '
auch
Bearbeiten Sie als Antwort auf den Kommentar von mklement .
Die obige Funktion kann leicht um ein beliebiges Zeichen erweitert werden. Um weitere Zeichen anzugeben, die maskiert werden sollen, fügen Sie sie einfach sowohl in die Zeichenklasse im regulären Ausdruck (dh innerhalb des /[...]/g
) als auch als Eintrag im chr
Objekt ein. ( EDIT 2: In gleicher Weise wurde auch diese Funktion verkürzt.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
Beachten Sie die obige Verwendung von '
für Apostroph (die symbolische Entität wurde '
möglicherweise stattdessen verwendet - sie ist in XML definiert, wurde jedoch ursprünglich nicht in die HTML-Spezifikation aufgenommen und wird daher möglicherweise nicht von allen Browsern unterstützt. Siehe: Wikipedia-Artikel zu HTML-Zeichencodierungen ). Ich erinnere mich auch daran, dass ich irgendwo gelesen habe, dass die Verwendung von Dezimalstellen stärker unterstützt wird als die Verwendung von Hexadezimal, aber ich kann die Quelle dafür derzeit nicht finden. (Und es kann nicht viele Browser geben, die die hexadezimalen Entitäten nicht unterstützen.)
Hinweis: Das Hinzufügen /
und '
zur Liste der maskierten Zeichen ist nicht allzu nützlich, da sie in HTML keine besondere Bedeutung haben und nicht maskiert werden müssen.
Ursprüngliche escapeHtml
Funktion
BEARBEITEN 2: Die ursprüngliche Funktion verwendete eine Variable ( chr
), um das für den .replace()
Rückruf benötigte Objekt zu speichern . Diese Variable benötigte auch eine zusätzliche anonyme Funktion, um sie zu erweitern, wodurch die Funktion (unnötig) etwas größer und komplexer wurde.
var escapeHtml = (function () {
'use strict';
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
Ich habe nicht getestet, welche der beiden Versionen schneller sind. Wenn Sie dies tun, können Sie hier Informationen und Links dazu hinzufügen.