Как закодировать строку в JavaScript для отображения в HTML?
Описание проблемы
Я столкнулся с задачей преобразования строки в HTML в JavaScript и не могу найти оптимальное решение.
Например, у меня есть строка:
var unsafestring = "<oohlook&atme>";
Мне нужно преобразовать её таким образом, чтобы полученная строка выглядела так:
var safestring = magic(unsafestring);
После выполнения функции magic
переменная safestring
должна равняться "&lt;ohhlook&amp;atme&gt;"
.
Я ищу реализацию функции magic(...)
. При этом не хочу использовать jQuery для этой задачи.
Заранее благодарю за помощь!
2 ответ(ов)
Ваша функция htmlEntities
используется для экранирования специальных символов в строке, чтобы предотвратить проблемы с HTML, такие как XSS-атаки. Она заменяет следующие символы на их HTML-сущности:
&
на&
<
на<
>
на>
"
на"
Таким образом, если у вас есть строка, которая может содержать небезопасные символы, например:
var unsafestring = "<oohlook&atme>";
Вы можете использовать вашу функцию следующим образом:
var safeString = htmlEntities(unsafestring);
Теперь переменная safeString
будет содержать экранированную версию строки, что предотвратит любые нежелательные интерпретации этих символов в HTML. В данном примере, safeString
будет равно <oohlook&atme>
.
Чтобы корректно обработать специальные символы в строке, нужно экранировать <
и &
. Экранирование >
тоже не повредит:
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-сущности там, где это необходимо.
Потеряно HTML-кодирование при чтении атрибута из поля ввода
jQuery/JavaScript: Замена битых изображений
Предварительный просмотр изображений перед загрузкой
Как создать WYSIWYG-редактор на HTML/JS? [закрыто]
Как выполнить код после сброса HTML-формы с помощью jQuery?