Я написав маленьку маленьку функцію, яка це робить. Він тільки тікає "
, &
, <
і >
(але , як правило, це все , що вам потрібно в будь-якому випадку). Це трохи елегантніше, ніж запропоновані раніше рішення, оскільки для їх перетворення використовується лише одне .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]; });
};
}());
Я не перевіряв, яка з двох версій швидша. Якщо ви це зробите, не соромтесь додавати тут інформацію та посилання на неї