Преобразование sanitized html обратно в отображаемый html

Я получаю html данные из базы данных, которая была дезинфицирована.

В основном то, что я получаю, выглядит примерно так:

<div class="someclass"><blockquote>
  <p>something here.</p>
</blockquote>

И так далее. Поэтому, если я попытаюсь отобразить его, он будет отображаться как

<div class="someclass"><blockquote> <p>something here</p> </blockquote>

Я хочу преобразовать его в соответствующий html перед отображением, чтобы содержимое отображалось правильно, без тегов.

Какой самый простой способ сделать это с помощью javascript?

Просто хочу отметить, что я работаю в Adobe AIR. Поэтому у меня нет альтернатив.

Ответы

Ответ 1

Вы можете создать элемент, назначить закодированный HTML его innerHTML и извлечь nodeValue из текста node, созданного при вставке.

function htmlDecode(input){
  var e = document.createElement('div');
  e.innerHTML = input;
  return e.childNodes[0].nodeValue;
}

htmlDecode('&lt;div class="someclass"&gt;&lt;blockquote&gt; &lt;p&gt;&quot; ' +
           'something&quot;&nbsp;here.&lt;/p&gt;Q&lt;/blockquote&gt;')

// returns :
// "<div class="someclass"><blockquote> <p>"something" here.</p>Q</blockquote>"

Обратите внимание, что этот метод должен работать со всеми HTML-символами.

Ответ 2

Это может помочь в оснастке:

String.prototype.deentitize = function() {
    var ret = this.replace(/&gt;/g, '>');
    ret = ret.replace(/&lt;/g, '<');
    ret = ret.replace(/&quot;/g, '"');
    ret = ret.replace(/&apos;/g, "'");
    ret = ret.replace(/&amp;/g, '&');
    return ret;
};

Ответ 3

Я не уверен, почему вы захотите сделать это с помощью JavaScript, если только это не серверная JS... но в любом случае вы можете просто скопировать &gt; и &lt; с их эквивалентами, используя строку replace функция.

Однако это может привести к проблемам, если вы использовали эти два в некотором тексте, скажем, что вы написали учебник HTML или что-то еще. Вот почему в таких случаях вы можете захотеть вместо этого сохранить неанитированный HTML в своей базе данных, потому что преобразование его может быть сложно сделать правильно.