Javascript:Escape<>对于非html字符串,但保留html

时间:2016-08-29 15:30:41

标签: javascript html escaping

我有一些包含HTML的文本(要在浏览器中呈现),以及包含<>的任意字符串。有没有办法逃避这些任意标签,但保留HTML?如果它有帮助,则被解析的HTML受到严格管理,并且只允许一部分标记(bistrongbr

例如。鉴于此文:

<strong>Foobar</strong> <some other whatever>

我需要

<strong>Foobar</strong> &lt;some other whatever&gt;

1 个答案:

答案 0 :(得分:1)

一个便宜的选择是用占位符替换<>,然后在“好”的上下文中恢复它们:

allowedTags = ['strong', 'em', 'p'];

text = '<strong>Foobar</strong> <some other whatever> <b>??</b> <em>hey</em>'

text = text
  .replace(/</g, '\x01')
  .replace(/>/g, '\x02')
  .replace(new RegExp('\x01(/?)(' + allowedTags.join('|') + ')\x02', 'g'), "<$1$2>")
  .replace(/\x01/g, '&lt;')
  .replace(/\x02/g, '&gt;')

console.log(text)

一个不那么便宜但更正确的解决方案是使用(事件驱动的)html解析器,并在你去的时候逃避不需要的东西。