0

我有富文本内容的字符串

例如这样的东西

<p>Hello</p>

<br/>

<p> Christian </p>

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

现在我不希望脚本出现在上述内容中,如果存在的话

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

<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;"))
}

所以结果内容将有脚本标签转义

谁能建议我更清洁的方法来实现这一目标?

4

3 回答 3

1

清洁器:

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

但是,这可能不是解决此问题的方法。为什么这些<script>标签首先在 JS 字符串中?

于 2012-02-28T09:37:30.507 回答
0

不是您正在寻找的答案,但是如果禁用了 javascript 怎么办?您是否要让未转义的内容显示在页面上。希望不是

转义必须使用服务器端脚本来完成PHP,例如ASP.NET等。

和 PHP 一样,htmlentities()[docs here]就可以了

$escaped = htmlentities($content)
于 2012-02-28T09:34:13.463 回答
0

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

于 2012-02-28T09:35:59.503 回答