如何在HTML文本中禁用脚本标记?

时间:2015-12-02 03:03:32

标签: javascript

我有div id=content,我想将它的innerHtml更改为字符串变量markup,但我想禁用脚本标记。

例如,如果

markup='<b>Bold text here </b><i><script>alert("JS will be treated as normal text")</script></i>';

content div应为

  

此处加粗文字 &lt; script&gt;提醒(“JS将被视为普通文字”)&lt; / script&gt;

我无法使用innerHTML,因为它会运行警告框,我无法使用innerText,因为其他标记将显示为普通文本。

我搜索了这个问题并找到了很多regix表达式。我对regix了解不多,但我找到的所有表达式都是删除所有标签,而不是禁用标签。

我不想使用jquery,即使我尝试使用.vla().text()也没有用。但现在我只想使用js。

我还希望它能够处理脚本标记的任何有效变体,包括:<Script>, <sCrIPt><script type= "text/javascript"></script >

3 个答案:

答案 0 :(得分:2)

只需将<script>的任何实例替换为&lt;script&rt;之类的内容,以便它不会呈现为标记,但会以HTML格式输出,就好像它是标记一样。

请考虑以下事项:

markup.replace(/<script>/gi, "&lt;script&rt;");

您也可以对结束标记执行相同的操作:

// Replaces start and end tag
markup.replace(/<script>/gi, "&lt;script&rt;").replace(/</script>/gi, "&lt;/script&rt;");

<强>更新

通过添加gi,它使整个表达式不区分大小写。

答案 1 :(得分:2)

您可以使用replace()函数简单地用转义版本替换脚本标记。但是,如果需要替换多个实例,则需要设置全局标志的正则表达式。因此,要替换脚本开始和结束标记,它将是:

var html = markup.replace(/<script[^>]*>/gi, "&lt;script&rt;").replace(/<\/script[^>]*>/gi, "&lt;/script&rt;");

要替换结束标记,必须使用\/来转义正斜杠,以便浏览器不会认为它正在关闭正则表达式模式。 &#39; i&#39; flag使其不区分大小写,因此使用大写和小写的组合并不重要。 [^>]*表示它将匹配任何数量不是>的字符(包括0)。因此,它将替换<script和结束>之间的任何字符。

答案 2 :(得分:1)

只需拨打一次replace

即可替换所有脚本代码
markup.replace(/<(\/?script)>/gi, '&lt;$1&gt;');

gi标志使正则表达式不区分大小写(i)和全局(g),因此它可以替换模式的多个实例。

?使前一个字符成为可选字符,在这种情况下,它可以匹配"<script>""</script>"