Большинство ответов, приведенных здесь, имеют огромный недостаток: если строка, которую вы пытаетесь преобразовать, не является доверенной, в результате вы получите уязвимость Cross-Site Scripting (XSS) . Для функции из принятого ответа рассмотрите следующее:
htmlDecode("<img src='dummy' onerror='alert(/xss/)'>");
Строка здесь содержит HTML-тег без экранирования, поэтому вместо расшифровки чего-либо, функция htmlDecode
будет фактически выполнять код JavaScript, указанный внутри строки.
Этого можно избежать, используя DOMParser , который поддерживается во всех современных браузерах :
function htmlDecode(input)
{
var doc = new DOMParser().parseFromString(input, "text/html");
return doc.documentElement.textContent;
}
// This returns "<img src='myimage.jpg'>"
htmlDecode("<img src='myimage.jpg'>");
// This returns ""
htmlDecode("<img src='dummy' onerror='alert(/xss/)'>");
Эта функция гарантированно не запускает какой-либо код JavaScript в качестве побочного эффекта. Любые HTML-теги будут игнорироваться, будет возвращен только текстовый контент.
Примечание о совместимости : для анализа HTML с DOMParser
требуется как минимум Chrome 30, Firefox 12, Opera 17, Internet Explorer 10, Safari 7.1 или Microsoft Edge. Таким образом, все браузеры без поддержки уже прошли EOL, и по состоянию на 2017 год единственными, которые все еще можно увидеть в дикой природе, иногда являются старые версии Internet Explorer и Safari (обычно их все еще недостаточно, чтобы беспокоиться).