如何禁用html文本中的脚本标记
how to disable script tags in a html text?
我有一个带有id=content
的div
,我想将它的innerHtml更改为字符串变量markup
,但我想禁用脚本标记。
例如,如果
markup='<b>Bold text here </b><i><script>alert("JS will be treated as normal text")</script></i>';
content
div应为
此处为粗体文本<script>alert("JS将被视为普通文本")<脚本>
我不能使用innerHTML
,因为它将运行警报框;我不能使用innerText
,因为其他标记将显示为普通文本。
我搜索了这个问题,发现了很多regix表达式。我对regix了解不多,但我发现的所有表达式都是删除所有标签,而不是禁用标签。
我不想使用jquery,尽管我尝试使用.vla()
和.text()
,但都没有成功。但现在我只想使用js。
我还希望它能够处理脚本标记的任何有效变体,包括:<Script>,
<sCrIPt>
、<script type= "text/javascript">
和</script >
您可以使用replace()
函数用转义版本简单地替换脚本标记。但是,如果需要替换多个实例,则需要设置全局标志的regex。因此,要替换脚本的打开和关闭标记,它将是这样的:
var html = markup.replace(/<script[^>]*>/gi, "<script&rt;").replace(/<'/script[^>]*>/gi, "</script&rt;");
为了替换结束标记,'/
必须转义正斜杠,这样浏览器就不会认为它正在关闭regex模式。"i"标志使其不区分大小写,因此使用大写和小写的组合并不重要。并且[^>]*
意味着它将匹配不是>
的任何数量的字符(包括0)。因此,它将替换<script
和结束>
之间的任何字符。
只需用类似<script&rt;
的东西替换<script>
的任何实例,这样它就不会呈现为标记,而是以HTML形式输出,看起来就像是一个标记。
考虑以下内容:
markup.replace(/<script>/gi, "<script&rt;");
你也可以对结束标签做同样的事情:
// Replaces start and end tag
markup.replace(/<script>/gi, "<script&rt;").replace(/</script>/gi, "</script&rt;");
更新
通过添加gi
,它使整个表达式不区分大小写。
只需调用一次replace
即可替换所有脚本标记
markup.replace(/<('/?script)>/gi, '<$1>');
gi
标志使正则表达式不区分大小写(i
)和全局(g
),因此它可以替换模式的多个实例。
?
使前一个字符可选,在这种情况下,它可以匹配"<script>"
和"</script>"
- Rad网格编辑模式通过选中复选框时的java脚本启用禁用所需的字段验证器
- 运行脚本以禁用脚本
- 如何防止用户使用浏览器选项禁用脚本
- 如何在移动设备上禁用一些js脚本
- 如何使用java脚本代码计算禁用按钮的时间
- 如何禁用Chrome扩展中包含的脚本
- 禁用文本框的脚本错误显示
- 我用来禁用回车键的java脚本函数不起作用
- 浏览器开发工具:禁用第三方脚本中的警告
- 禁用脚本中的HTML代码部分
- 如何根据条件启用或禁用脚本
- jQuery - 基于复选框禁用 href - 脚本的位置
- 如何禁用基于布尔值的Google AdSense脚本
- FireFox SDK 插件 - 禁用/卸载时的“分离内容脚本”
- 单击一个链接将在 java 脚本中禁用其他链接
- Java脚本DrobDown禁用标记
- 脚本已禁用重定向
- Java脚本已禁用并在加载事件之前打开
- 在iframe脚本中禁用超链接
- Page.IsValid总是返回false,即使我在java脚本中禁用了验证