如何从JavaScript中的字符串中剥离HTML标签?

2022-08-30 00:15:06

如何从 JavaScript 中的字符串中剥离 HTML?


答案 1
cleanText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");

本网站(web.achive)提炼而来

此正则表达式查找 ,可选斜杠 ,一个或多个不是 的字符,然后是 或 (行尾)</>>$

例子:

'<div>Hello</div>' ==> 'Hello'
 ^^^^^     ^^^^^^
'Unterminated Tag <b' ==> 'Unterminated Tag '
                  ^^

但它不是防弹的:

'If you are < 13 you cannot register' ==> 'If you are '
            ^^^^^^^^^^^^^^^^^^^^^^^^
'<div data="score > 42">Hello</div>' ==> ' 42">Hello'
 ^^^^^^^^^^^^^^^^^^          ^^^^^^

如果有人试图破坏您的应用程序,此正则表达式不会保护您。仅当您已经知道输入的格式时,才应使用它。正如其他知识渊博且大多理智的人所指出的那样,要安全地剥离标签,您必须使用解析器。

如果您没有像DOM这样的方便解析器,并且您无法信任您的输入采用正确的格式,那么最好使用像sanitize-html这样的软件包,并且还有其他可用的消毒器


答案 2

使用浏览器的解析器可能是当前浏览器中最好的选择。以下方法有效,但有以下注意事项:

  • 您的 HTML 在元素中是有效的。包含在 或 中的 HTML 在 中无效,因此可能无法正确解析。<div><body><html><head><div>
  • textContent(DOM 标准属性)和 innerText(非标准)属性不相同。例如,将在元素中包含文本,而不会(在大多数浏览器中)。这只会影响IE<=8,这是唯一不支持的主要浏览器。textContent<script>innerTexttextContent
  • HTML 不包含元素。<script>
  • HTML 不是null
  • HTML 来自受信任的来源。将其与任意HTML一起使用允许执行任意不受信任的JavaScript。这个例子来自Mike Samuel对重复问题的评论:<img onerror='alert(\"could run arbitrary JS here\")' src=bogus>

法典:

var html = "<p>Some HTML</p>";
var div = document.createElement("div");
div.innerHTML = html;
var text = div.textContent || div.innerText || "";