Rea*_*ven 273

cleanText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
Run Code Online (Sandbox Code Playgroud)

该网站(web.achive)中提取.

  • @ f.ardelian因为打破普通HTML解析普通表达式的错误而成为一个爱好者.这是一个很好的爱好. (96认同)
  • 对不起,但这会打破`<img rel="nofollow noreferrer" alt ="a> b"src ="a_b.gif"/>` (34认同)
  • @ f.ardelian那将是错误的HTML,它必须是<img rel="nofollow noreferrer" alt ="a&gt; b". (25认同)
  • 使用reg不是好方法http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags (12认同)
  • @ f.ardelian没有!真!每当我阅读其中一条评论帖时,我都会感到有点兴奋."何浩,"我想"<img rel="nofollow noreferrer" alt = \"a> b \"src = \"a_b.gif \"/>,太聪明了!" (11认同)
  • @Ziggy:听起来很像讽刺...... (3认同)

Tim*_*own 230

使用浏览器的解析器可能是当前浏览器中最好的选择.以下内容将起作用,并带有以下警告:

  • 您的HTML在<div>元素中有效.包含在<body>or <html><head>tag中的HTML 在a中无效<div>,因此可能无法正确解析.
  • textContent(DOM标准属性)和innerText(非标准)属性不相同.例如,textContent将包含<script>元素内的文本而innerText不会(在大多数浏览器中).这仅影响IE <= 8,这是唯一不支持的主要浏览器textContent.
  • 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 || "";
Run Code Online (Sandbox Code Playgroud)

  • 安全问题......当你设置div.innerHTML时,这可能很容易受到攻击......我确定你不想让一些不需要的脚本被执行....手动清理会很酷. (4认同)
  • 当字符串包含<script> alert('hi'); </ script>之类的内容时不起作用.然后它崩溃了"非法令牌"等. (3认同)
  • 好警告.如果还不清楚,我想补充一点,如果`html`的值为'NULL`,Firefox将在`div.innerHTML = html`上崩溃.更糟糕的是,它不会正确报告错误(而是说父函数有'TypeError`).Chrome/IE不会崩溃. (2认同)
  • 优雅的解决方案,但不是普遍的.如果由于文档依赖性而在节点服务器上使用它,则它不起作用 (2认同)
  • &lt;p&gt;test&lt;/p&gt;&lt;p&gt;test&lt;/p&gt; 给出 testtest,之间应该有 spave 或换行符 (2认同)

Fel*_*lix 49

var html = "<p>Hello, <b>World</b>";
var div = document.createElement("div");
div.innerHTML = html;
alert(div.innerText); // Hello, World
Run Code Online (Sandbox Code Playgroud)

这是最好的方法,你让浏览器做它最擅长的事情 - 解析HTML.


编辑:如下面的评论中所述,这不是最跨浏览器的解决方案.最跨浏览器的解决方案是以递归方式遍历元素的所有子元素并连接您找到的所有文本节点.但是,如果你正在使用jQuery,它已经为你做了:

alert($("<p>Hello, <b>World</b></p>").text());
Run Code Online (Sandbox Code Playgroud)

查看文本方法.

  • 一个简洁的jQuery可能看起来像:`var html ="<b> test </ b>"; var text = $("<div />").html(html).text();`使用`$("<div />")`允许你为连续调用或循环重用相同的元素和更少的内存. (6认同)
  • 并非每个浏览器都支持`innerText`. (3认同)
  • 同样的问题,崩溃:$(...).html('<script> alert("hi"); </ script>').text(); (2认同)

Til*_*ill 26

我知道这个问题有一个公认的答案,但我觉得它在所有情况下都不起作用.

为了完整性,因为我花了太多时间在这上面,这就是我们所做的:我们最终使用了php.js中的一个函数(对于那些更熟悉PHP的人来说这是一个非常好的库,但是现在每个人都做一些JavaScript然后):

http://phpjs.org/functions/strip_tags:535

它似乎是唯一成功处理我填充到我的应用程序中的所有不同类型输入的JavaScript代码.也就是说,不破坏它 - 请参阅我对上述<script />标签的评论.

  • ^ 这个,绝对比 Chrome 30.0 及更高版本的公认答案好 (2认同)
  • 更新链接:http://locutus.io/php/strings/strip_tags/ (2认同)