JavaScript中如何解码HTML实体?

10

示例转换:

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

有没有可以处理这个的小型库函数?

3个回答

28

我在我的工具腰带上经常会用到这个小函数:

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;
}

请查看我的对bboe的评论。 - Pablo

4

这个库的最后更新是在2018年,所以如果可能的话,我会避免使用它。 - fredrivett

3
看起来这样做就可以了。
function html_entity_decode(s) {
  var t=document.createElement('textarea');
  t.innerHTML = s;
  var v = t.value;
  t.parentNode.removeChild(t);
  return v;
}

Source


1
我没有文档对象,也不应该依赖它,因为我正在使用JSM XUL。 - Pablo
2
您可以使用依赖于表查找的代码(http://phpjs.org/functions/htmlentities:425)。您需要反向查找以解码实体。 - bboe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接