Я написав маленьку маленьку функцію, яка це робить. Він тільки тікає ", &, <і >(але , як правило, це все , що вам потрібно в будь-якому випадку). Це трохи елегантніше, ніж запропоновані раніше рішення, оскільки для їх перетворення використовується лише одне .replace() . ( EDIT 2: Зменшення складності коду робить функцію ще меншою та акуратнішою, якщо вам цікаво оригінальний код, див. Кінець цієї відповіді.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
Це звичайний Javascript, не використовується jQuery.
Втеча /і 'теж
Редагувати у відповідь на коментар mklement .
Вищевказану функцію можна легко розширити, включаючи будь-який символ. Щоб вказати більше символів для втечі, просто вставляйте їх як у клас символів у регулярному виразі (тобто всередині /[...]/g), так і як запис у chrоб’єкті. ( EDIT 2: Скорочуйте цю функцію також аналогічно.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
Зверніть увагу на вищезазначене використання 'апострофа (символьна сутність, 'можливо, була використана натомість - вона визначена в XML, але спочатку не була включена в специфікацію HTML, тому може не підтримуватися всіма браузерами. Див.: Стаття Вікіпедії про кодування символів HTML ). Я також пригадую, що десь читав, що використання десяткових сутностей більш широко підтримується, ніж використання шістнадцяткових, але я не можу зараз знайти джерело для цього. (І там не може бути багато браузерів, які не підтримують шістнадцяткову сутність.)
Примітка. Додавання /та 'перелік символів, що увійшли, не є таким корисним, оскільки вони не мають особливого значення в HTML і не потребують цього уникати.
Оригінальна escapeHtmlфункція
EDIT 2: Оригінальна функція використовувала змінну ( chr) для зберігання об'єкта, необхідного для .replace()зворотного виклику. Ця змінна також потребувала додаткової анонімної функції, щоб розширити її, зробивши функцію (без потреби) трохи більшою і складною.
var escapeHtml = (function () {
'use strict';
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
Я не перевіряв, яка з двох версій швидша. Якщо ви це зробите, не соромтесь додавати тут інформацію та посилання на неї