0

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

11

Описание проблемы

Я столкнулся с задачей преобразования строки в HTML в JavaScript и не могу найти оптимальное решение.

Например, у меня есть строка:

var unsafestring = "<oohlook&atme>";

Мне нужно преобразовать её таким образом, чтобы полученная строка выглядела так:

var safestring = magic(unsafestring);

После выполнения функции magic переменная safestring должна равняться "<ohhlook&atme>".

Я ищу реализацию функции magic(...). При этом не хочу использовать jQuery для этой задачи.

Заранее благодарю за помощь!

2 ответ(ов)

0

Ваша функция htmlEntities используется для экранирования специальных символов в строке, чтобы предотвратить проблемы с HTML, такие как XSS-атаки. Она заменяет следующие символы на их HTML-сущности:

  • & на &
  • < на &lt;
  • > на &gt;
  • " на &quot;

Таким образом, если у вас есть строка, которая может содержать небезопасные символы, например:

var unsafestring = "<oohlook&atme>";

Вы можете использовать вашу функцию следующим образом:

var safeString = htmlEntities(unsafestring);

Теперь переменная safeString будет содержать экранированную версию строки, что предотвратит любые нежелательные интерпретации этих символов в HTML. В данном примере, safeString будет равно &lt;oohlook&amp;atme&gt;.

0

Чтобы корректно обработать специальные символы в строке, нужно экранировать < и &. Экранирование > тоже не повредит:

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-сущности там, где это необходимо.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь