Ich habe eine winzig kleine Funktion geschrieben, die dies tut. Sie entkommt nur "
, &
, <
y >
(aber das ist in der Regel auch alles, was man braucht). Sie ist etwas eleganter als die früher vorgeschlagenen Lösungen, da sie nur eine .replace()
um die gesamte Konvertierung durchzuführen. ( EDIT 2: Die Komplexität des Codes wurde reduziert, so dass die Funktion noch kleiner und übersichtlicher ist (falls Sie sich für den Originalcode interessieren, siehe Ende dieser Antwort).
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
Dies ist einfaches Javascript, kein jQuery verwendet.
Die Flucht /
y '
zu
Bearbeiten als Antwort auf mklement Kommentar.
Die obige Funktion kann leicht erweitert werden, um jedes beliebige Zeichen einzubeziehen. Wenn Sie mehr Zeichen angeben möchten, die entkommen sollen, fügen Sie sie einfach beide in die Zeichenklasse des regulären Ausdrucks ein (d. h. innerhalb der /[...]/g
) und als Eintrag in der chr
Objekt. ( EDIT 2: Auch diese Funktion wurde auf die gleiche Weise verkürzt).
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
Beachten Sie die obige Verwendung von '
für Hochkomma (die symbolische Einheit '
hätte stattdessen verwendet werden können - es ist in XML definiert, war aber ursprünglich nicht in der HTML-Spezifikation enthalten und wird daher möglicherweise nicht von allen Browsern unterstützt. Siehe: Wikipedia-Artikel über HTML-Zeichenkodierungen ). Ich erinnere mich auch, irgendwo gelesen zu haben, dass die Verwendung von dezimalen Entitäten besser unterstützt wird als die Verwendung von hexadezimalen, aber ich kann die Quelle dafür nicht mehr finden. (Und es kann nicht viele Browser da draußen sein, die die hexadezimalen Entitäten nicht unterstützen).
Nota: Hinzufügen von /
y '
in die Liste der escapeten Zeichen aufzunehmen, ist nicht sehr nützlich, da sie in HTML keine besondere Bedeutung haben und nicht necesito zu entkommen.
Original escapeHtml
Funktion
EDIT 2: Die ursprüngliche Funktion verwendete eine Variable ( chr
), um das Objekt zu speichern, das für die .replace()
Rückruf. Diese Variable benötigte außerdem eine zusätzliche anonyme Funktion, um sie in den Anwendungsbereich zu bringen, was die Funktion (unnötigerweise) ein wenig größer und komplexer machte.
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 ist. Wenn Sie das tun, können Sie hier gerne Informationen und Links dazu hinzufügen.
0 Stimmen
Siehe auch Perf: jsperf.com/