Преобразование 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('<div class="someclass"><blockquote> <p>" ' +
'something" here.</p>Q</blockquote>')
// returns :
// "<div class="someclass"><blockquote> <p>"something" here.</p>Q</blockquote>"
Обратите внимание, что этот метод должен работать со всеми HTML-символами.
Ответ 2
Это может помочь в оснастке:
String.prototype.deentitize = function() {
var ret = this.replace(/>/g, '>');
ret = ret.replace(/</g, '<');
ret = ret.replace(/"/g, '"');
ret = ret.replace(/'/g, "'");
ret = ret.replace(/&/g, '&');
return ret;
};
Ответ 3
Я не уверен, почему вы захотите сделать это с помощью JavaScript, если только это не серверная JS... но в любом случае вы можете просто скопировать >
и <
с их эквивалентами, используя строку replace функция.
Однако это может привести к проблемам, если вы использовали эти два в некотором тексте, скажем, что вы написали учебник HTML или что-то еще. Вот почему в таких случаях вы можете захотеть вместо этого сохранить неанитированный HTML в своей базе данных, потому что преобразование его может быть сложно сделать правильно.