更好的方式来写这个来逃避HTML内容

时间:2012-02-28 09:31:45

标签: javascript regex recursive-regex

我有富含文字内容的字符串

例如

之类的东西
<p>Hello</p>

<br/>

<p> Christian </p>

<pre> Don't Know what to do </pre>

现在我想要不要在上面的内容中出现脚本,如果存在esape它

所以如果我的内容看起来像这样

<p>Hello</p>

<br/>

<p> Christian </p>
<script type="text/javascript"> alert("Hello")</script>
<pre> Don't Know what to do </pre>

需要替换为

<p>Hello</p>

<br/>

<p> Christian </p>
&lt;script type="text/javascript"&gt; alert("Hello")&lt;/script&gt;
<pre> Don't Know what to do </pre>

我目前为它开发了正则表达式

所以我的代码看起来像这样

if content.match(/<script(.+?)>/) {
  content = content.replace(content.match(/<script(.+?)>/)[0],content.match(/<script(.+?)>/)[0].replace("<","&lt;").replace(">","&gt;"))
}
if content.match(/<\script\s*>/)
 {
content = content.replace(content.match(/<\/script\s*>/)[0],content.match(/<\/script\s*>/)[0].replace("<","&lt;").replace(">","&gt;"))
}

因此结果内容将转义脚本标记

有人能建议我更清洁地实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

清洁剂:

content = content.replace(/<(script[^>]*|\/script)>/g, '&lt;$1&gt;');

然而,这可能是的方式。为什么JS字符串中的这些<script>标签首先出现?

答案 1 :(得分:0)

不是您正在寻找的答案,但如果禁用javascript会怎么样?你打算让未转义的内容出现在页面上吗? 希望不

必须使用PHPASP.NET等服务器端脚本执行转义。

与在PHP中一样,htmlentities() [docs here] 也可以。

$escaped = htmlentities($content)

答案 2 :(得分:0)

我认为你应该逃避那些角色服务器端。例如,在PHP中,您使用htmlentities