Декодировать HTML-объекты в JavaScript? - PullRequest
8 голосов
/ 11 мая 2010

Пример преобразования:

 & -> `&`
 >  -> `>`

Любая небольшая библиотечная функция, которая может справиться с этим?

Ответы [ 3 ]

25 голосов
/ 11 мая 2010

У меня на поясе общего назначения всегда есть эта крошечная функция:

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

htmlDecode("&"); // "&"
htmlDecode(">"); // ">"

Это будет работать для всех HTML-сущностей .

Редактировать: Поскольку вы не находитесь в среде DOM, я думаю, вам придется сделать это "сложным" способом:

function htmlDecode (input) {
  return input.replace(/&/g, "&")
              .replace(/&lt;/g, "<")
              .replace(/&gt;/g, ">");
              //...
}

Если вам не нравятся цепные замены, вы можете построить объект для хранения ваших сущностей, например:

function htmlDecode (input) {
  var entities= {
    "&amp;": "&",
    "&lt;": "<",
    "&gt;": ">"
    //....
  };

  for (var prop in entities) {
    if (entities.hasOwnProperty(prop)) {
      input = input.replace(new RegExp(prop, "g"), entities[prop]);
    }
  }
  return input;
}
3 голосов
/ 11 мая 2010

Похоже, это будет делать:

function html_entity_decode(s) {
  var t=document.createElement('textarea');
  t.innerHTML = s;
  var v = t.value;
  t.parentNode.removeChild(t);
  return v;
}

Источник

1 голос
/ 07 августа 2017

Надежный кодировщик / декодер сущностей HTML, написанный на JavaScript.

https://mths.be/he

he (для «сущностей HTML») - надежный кодер / декодер сущностей HTML, написанный на JavaScript. Он поддерживает все стандартизированные ссылки именованных символов в соответствии с HTML , обрабатывает неоднозначные амперсанды и другие крайние случаи , как браузер будет , имеет обширный набор тестов и - вопреки многим другим решениям JavaScript - он прекрасно обрабатывает астральные символы Юникода. Доступна онлайн-демонстрация.

...