Декодирование HTML из JSON
Table Of Content
Часто при парсинге веб-страниц вы сталкиваетесь с HTML-значениями в тексте, которые нужно преобразовать в символьную форму. В то время как у jQuery и различных других языков есть реализации для декодирования этих значений, в нативном JavaScript такой возможности нет.
Для решения этой проблемы я начал с разбора HTML-кодов с использованием таблицы преобразования слово за словом. Этот метод был безопасным и не требовал доступа к DOM веб-страницы. Хотя метод работал, он имел недостаток в виде большого размера файла из-за необходимости упаковки таблицы преобразования в файл. Еще одним недостатком этого решения было время, затрачиваемое на разбор сотен строк различной сложности.
Ища другие реализации этой идеи, я нашел решение от Rob W на Stack Overflow.
function decodeHtml(html) {
var txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
}
Приведенный выше код не удаляет HTML-теги, как другие подходы, и обладает хорошей производительностью. Большая проблема заключается в том, что он имеет прямой доступ к DOM. Чтобы уменьшить это, я рекомендую использовать следующий код, созданный мной на основе решения Роба.
function decodeHtml(html) {
var htmlDoc = document.implementation.createHTMLDocument("");
var txt = htmlDoc.createElement("textarea");
txt.innerHTML = html;
return txt.value;
}
Это предотвратит выполнение скриптов и создаст разделение между вашим приложением и его возможностями парсинга. Он сохраняет все преимущества первого решения и безопасен для использования в производстве.