当前位置: 首页 > 面试题库 >

要在JavaScript中转义HTML实体吗?

万俟招
2023-03-14
问题内容

我有一些与XML-RPC后端通信的Javascript代码。XML-RPC返回以下形式的字符串:

<img src='myimage.jpg'>

但是,当我使用Javascript将字符串插入HTML时,它们将按字面显示。我没有看到图片,我从字面上看到了字符串:

<img src='myimage.jpg'>

我的猜测是HTML正在通过XML-RPC通道进行转义。

如何取消对Javascript中的字符串的转义?我尝试了此页面上的技术,但未成功:http :
//paulschreiber.com/blog/2008/09/20/javascript-how-to-unescape-html-
entities/

还有什么其他方法可以诊断问题?


问题答案:

编辑:
您应该按照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("&lt;img src='myimage.jpg'&gt;"); 
// returns "<img src='myimage.jpg'>"

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

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

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

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



 类似资料:
  • 问题内容: 我在允许用户输入内容的CMS中工作。问题在于,当他们添加符号时,它可能无法在所有浏览器中正常显示。我想设置一个必须搜索的符号列表,然后将其转换为相应的html实体。例如 ®=> &=> ©=> ™=> 转换后,需要将其包装在标签中,从而导致: => 由于必须使用特定的字体大小和填充样式: JavaScript会是这样吗? “ [?]”的意思是说我不确定。 额外细节: 我想使用纯Java

  • 问题内容: 我有一些用户输入。在我的代码中,我确保对以下符号进行转义: OWASP指出还有更多的字符可以转义。 对于属性,我做了另一种转义: 这样可以确保所有属性都用“括起来。”这样就可以确定自己的html属性,而不是HTML本身。 问题答案: 我也使用OWASP(ESAPI)库,以转义不同显示类型的字符串,请使用: HTML(假设为jsp) 更新 ( 2017 ) 由于ESAPI编码器被认为是旧

  • 问题内容: 转换示例: 任何小的库函数都可以解决这个问题? 问题答案: 我经常在工具带上有这个小功能: 它将适用于所有HTML实体。 编辑: 由于您不在DOM环境中,我认为您将必须通过“艰苦”的方式做到这一点: 如果您不喜欢链式替换,则可以构建一个对象来存储您的实体,例如:

  • 问题内容: 基本上,我想解码给定的HTML文档,并替换所有特殊字符,例如。 在.NET中,我们可以使用。 Java中的等效功能是什么? 问题答案: 我已为此使用: 将包含实体转义符的字符串取消转义为包含与转义符相对应的实际Unicode字符的字符串。支持HTML 4.0实体。

  • 问题内容: 它们是否与XML相同,也许还要加上空格()? 我发现的HTML转义字符一些大名单,但我不认为他们 必须 进行转义。我想知道 需要 逃避什么。 问题答案: 如果你在文本内容预期的位置在文档中插入文本内容1,你通常只需要,你会在XML逃脱相同的字符。在元素内部,这仅包括实体转义与号和元素定界符小于和大于符号 : 在属性值内部,还必须转义使用的引号字符: 在某些情况下,跳过这些字符中的某些字

  • 问题内容: 我想通过javascript函数将文本显示为HTML。如何在JS中转义html特殊字符?是否有API? 问题答案: