Подтвердить что ты не робот

Как закодировать строку в JavaScript для отображения в HTML?

Возможный дубликат:
Как избежать HTML

Как строка может быть преобразована в HTML в JavaScript?

например.

var unsafestring = "<oohlook&atme>";
var safestring = magic(unsafestring);

где safestring теперь равно "&lt;ohhlook&amp;atme&gt;"

Я ищу magic(...). Я не использую JQuery для magic.

4b9b3361

Ответ 1

function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}

Итак, с 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, '&amp;');
    input = input.replace(/</g, '&lt;');
    input = input.replace(/>/g, '&gt;');
    return input;
}

Или вы позволяете движку DOM делать грязную работу для вас (используя jQuery, потому что я ленив):

function magic(input) {
    return $('<span>').text(input).html();
}

То, что это делает, - это создание фиктивного элемента, назначающего вашу строку как textContent (т.е. никакие специфичные для HTML символы не имеют побочных эффектов, поскольку это просто текст), а затем вы извлекаете содержимое HTML этого элемента - это текст, но с специальные символы, преобразованные в объекты HTML в случаях, когда это необходимо.

Ответ 5

Единственный символ, которому требуется экранирование, <. (> не имеет смысла за пределами тега).

Поэтому ваш "волшебный" код:

safestring = unsafestring.replace(/</g,'&lt;');