为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用javascript从字符串中删除完整的标记?

如何使用javascript从字符串中删除完整的标记?

宝慕林4294392 2019-04-10 14:15:56
我的意见如下input = "hello <script>alert("I am stealing your data");</script>"我想从字符串中删除完整的脚本标记,输出应该是这样的output = "hello"试过以下命令,但不删除完整标记。input.replace(/(<([^>]+)>)/ig, ''));它给我们带来了结果"hello alert("I am stealing you data");"
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

您不应该使用正则表达式。而是使用DOM解析器功能:

var input = 'hello <script\>alert("I am stealing your data");</script\>';


var span = document.createElement("span");

span.innerHTML = input; // This will not execute scripts

// Remove all script tags within this span element:

Array.from(span.querySelectorAll("script"), script => script.remove()); 

// Get the remaining HTML out of it

var scriptless = span.innerHTML;


console.log(scriptless);

请注意,让用户将任意HTML传递给您的应用程序是一个非常糟糕的主意。清理涉及的不仅仅是删除脚本标记。


查看完整回答
反对 回复 2019-05-17
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您不需要使用正则表达式,因为它们很容易欺骗,不适合解析HTML内容,尤其是不受信任的HTML内容。

相反,您可以使用a DOMParser创建新文档并使用DOM API删除所有脚本标记,然后返回其余内容:

function sanitise(input) {

  const parser = new DOMParser();

  const doc = parser.parseFromString(input, "text/html");

  

  let scripts = [...doc.getElementsByTagName('script')]

  

  scripts.forEach(script => script.remove());

  

  return doc.body.textContent.trim();

}


//using the + because otherwise StackSnippets breaks

console.log(sanitise("hello <script>alert('I am stealing your data');</scr"+"ipt>"))


查看完整回答
反对 回复 2019-05-17
  • 2 回答
  • 0 关注
  • 493 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号