Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在html文本中禁用脚本标记?_Javascript - Fatal编程技术网

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

Javascript 如何在html文本中禁用脚本标记?,javascript,Javascript,我有一个div和id=content,我想将它的innerHtml更改为字符串变量markup,但我想禁用脚本标记 例如,如果 markup='<b>Bold text here </b><i><script>alert("JS will be treated as normal text")</script></i>'; markup='Bold text here alert(“JS将被视为普通文本”); conte

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

例如,如果

markup='<b>Bold text here </b><i><script>alert("JS will be treated as normal text")</script></i>';
markup='Bold text here alert(“JS将被视为普通文本”);
content
div应该是

此处粗体文本警告(“JS将被视为普通文本”)

我不能使用
innerHTML
,因为它将运行警报框,我也不能使用
innerText
,因为其他标记将显示为普通文本

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

我不想使用jquery,尽管我试图使用
.vla()
.text()
但没有成功。但现在我只想使用js


我还希望它能够处理脚本标记的任何有效变体,包括:
,以及
,只需将
的任何实例替换为
脚本&rt
这样它就不会呈现为标记,但会以HTML的形式输出,就像它是一个标记一样

考虑以下几点:

markup.replace(/<script>/gi, "&lt;script&rt;");
markup.replace(//gi,“script&rt;”);
您也可以对结束标记执行相同的操作:

// Replaces start and end tag
markup.replace(/<script>/gi, "&lt;script&rt;").replace(/</script>/gi, "&lt;/script&rt;");
//替换开始和结束标记
markup.replace(//gi,“script&rt;”)。replace(//gi,“/script&rt;”);
更新


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

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

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

要替换结束标记,必须使用
\/
来转义正斜杠,以便浏览器不会认为它正在关闭正则表达式模式。“i”标志使其不区分大小写,因此使用大写和小写的组合并不重要。而
[^>]*
意味着它将匹配任何数量的非
字符(包括0)。因此,这将替换介于

之间的任何字符。您只需一次调用
replace

markup.replace(/<(\/?script)>/gi, '&lt;$1&gt;');
markup.replace(//gi,$1');
gi
标志使正则表达式不区分大小写(
i
)和全局(
g
),因此它可以替换模式的多个实例


使前一个字符成为可选字符,在这种情况下,它可以匹配

(可能重复),请参阅此处的非正则表达式或jQuery解决方案:编写脚本标记的其他方法如何<代码>
。它们都被认为是脚本标记。那么写脚本标记的其他方法呢<代码>
。它们都被认为是脚本标记。@YazanWYusuf为此,您肯定需要一个正则表达式或一大堆replace语句。更新的答案。将所有答案放在一起,并修复不起作用的部分(如
&rt;
应该是
):
。替换(/]*)>/gi,“$1$2”)