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, "<script&rt;");
markup.replace(//gi,“script&rt;”);
您也可以对结束标记执行相同的操作:
// Replaces start and end tag
markup.replace(/<script>/gi, "<script&rt;").replace(/</script>/gi, "</script&rt;");
//替换开始和结束标记
markup.replace(//gi,“script&rt;”)。replace(//gi,“/script&rt;”);
更新
通过添加gi
它使整个表达式不区分大小写。您可以使用replace()
函数用转义版本简单地替换脚本标记。但是,如果需要替换多个实例,则需要设置全局标志的正则表达式。因此,要替换脚本开始和结束标记,如下所示:
var html = markup.replace(/<script[^>]*>/gi, "<script&rt;").replace(/<\/script[^>]*>/gi, "</script&rt;");
var html=markup.replace(/]*>/gi,“script&rt;”)replace(/]*>/gi,“/script&rt;”);
要替换结束标记,必须使用\/
来转义正斜杠,以便浏览器不会认为它正在关闭正则表达式模式。“i”标志使其不区分大小写,因此使用大写和小写的组合并不重要。而[^>]*
意味着它将匹配任何数量的非
字符(包括0)。因此,这将替换介于
之间的任何字符。您只需一次调用replace
markup.replace(/<(\/?script)>/gi, '<$1>');
markup.replace(//gi,$1');
gi
标志使正则表达式不区分大小写(i
)和全局(g
),因此它可以替换模式的多个实例
?
使前一个字符成为可选字符,在这种情况下,它可以匹配“
和”(可能重复),请参阅此处的非正则表达式或jQuery解决方案:编写脚本标记的其他方法如何<代码>
,
,
,
。它们都被认为是脚本标记。那么写脚本标记的其他方法呢<代码>
,
,
,
。它们都被认为是脚本标记。@YazanWYusuf为此,您肯定需要一个正则表达式或一大堆replace语句。更新的答案。将所有答案放在一起,并修复不起作用的部分(如&rt;
应该是
):。替换(/]*)>/gi,“$1$2”)