您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

要在JavaScript中转义HTML实体吗?

要在JavaScript中转义HTML实体吗?

您应该按照Wladimir的建议使用DOMParser API,因为发布的函数引入了安全漏洞,所以我编辑了以前的答案。

以下代码片段是旧答案的代码,但进行了少量修改:使用a textarea代替a div可以减少XSS漏洞,但是在IE9和Firefox中仍然存在问题。

function htmlDecode(input){
  var e = document.createElement('textarea');
  e.innerHTML = input;
  // handle case of empty input
  return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}

htmlDecode("<img src='myimage.jpg'>"); 
// returns "<img src='myimage.jpg'>"

基本上,我以编程方式创建DOM元素,将编码的HTML分配给它的innerHTML,并从在innerHTML插入上创建的文本节点中检索nodeValue。由于它只是创建一个元素而从不添加它,因此不会修改网站HTML。

它可以跨浏览器(包括较旧的浏览器)运行,并接受所有HTML字符实体

编辑:此代码的旧版本不适用于带有空白输入的IE,如jsFiddle(在IE中查看)所示。上面的版本适用于所有输入。

更新:看来这不适用于大字符串,并且还引入了一个 ,请参阅注释。

javascript 2022/1/1 18:14:01 有543人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶