如何从JavaScript中的字符串中剥离HTML标签?
2022-08-30 00:15:06
如何从 JavaScript 中的字符串中剥离 HTML?
如何从 JavaScript 中的字符串中剥离 HTML?
cleanText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
此正则表达式查找 ,可选斜杠 ,一个或多个不是 的字符,然后是 或 (行尾)<
/
>
>
$
例子:
'<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这样的软件包,并且还有其他可用的消毒器。
使用浏览器的解析器可能是当前浏览器中最好的选择。以下方法有效,但有以下注意事项:
<div>
<body>
<html>
<head>
<div>
textContent
(DOM 标准属性)和 innerText
(非标准)属性不相同。例如,将在元素中包含文本,而不会(在大多数浏览器中)。这只会影响IE<=8,这是唯一不支持的主要浏览器。textContent
<script>
innerText
textContent
<script>
null
<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 || "";