Как закодировать строку в JavaScript для отображения в HTML?
Возможный дубликат:
Как избежать HTML
Как строка может быть преобразована в HTML в JavaScript?
например.
var unsafestring = "<oohlook&atme>";
var safestring = magic(unsafestring);
где safestring
теперь равно "<ohhlook&atme>"
Я ищу magic(...)
.
Я не использую JQuery для magic
.
Ответы
Ответ 1
function htmlEntities(str) {
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
}
Итак, с var unsafestring = "<oohlook&atme>";
вы должны использовать htmlEntities(unsafestring);
Ответ 2
Не заморачивайся с кодировкой. Вместо этого используйте текст node. Данные в тексте node гарантируются как текст.
document.body.appendChild(document.createTextNode("Your&funky<text>here"))
Ответ 3
Если вы хотите использовать библиотеку, а не сами:
Наиболее часто используемым способом является использование jQuery для этой цели:
var safestring = $('<div>').text(unsafestring).html();
Если вы хотите кодировать все объекты HTML, вам придется использовать библиотеку или написать ее самостоятельно.
Вы можете использовать более компактную библиотеку, чем jQuery, например HTML-кодировщик и декодирование
Ответ 4
Вам нужно выйти <
и &
. Escaping >
тоже не болит:
function magic(input) {
input = input.replace(/&/g, '&');
input = input.replace(/</g, '<');
input = input.replace(/>/g, '>');
return input;
}
Или вы позволяете движку DOM делать грязную работу для вас (используя jQuery, потому что я ленив):
function magic(input) {
return $('<span>').text(input).html();
}
То, что это делает, - это создание фиктивного элемента, назначающего вашу строку как textContent (т.е. никакие специфичные для HTML символы не имеют побочных эффектов, поскольку это просто текст), а затем вы извлекаете содержимое HTML этого элемента - это текст, но с специальные символы, преобразованные в объекты HTML в случаях, когда это необходимо.
Ответ 5
Единственный символ, которому требуется экранирование, <
. (>
не имеет смысла за пределами тега).
Поэтому ваш "волшебный" код:
safestring = unsafestring.replace(/</g,'<');