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

13 浏览
0 Comments

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

我的输入如下:\n

input = "hello "

\n我想要从字符串中移除完整的script标签,输出应该是这样的:\n

output = "hello"

\n尝试了以下命令,但没有移除完整的标签。\n

input.replace(/(<([^>]+)>)/ig, ''));

\n它给出了以下结果:\n

"hello alert("I am stealing you data");"

0
0 Comments

问题的原因是:使用正则表达式来删除字符串中的完整标签不可靠,特别是对于不受信任的HTML内容来说。解决方法是使用DOMParser创建一个新的文档,然后使用DOM API查找并删除所有的script标签,最后返回剩余的内容。

代码如下:

function sanitise(input) {
  const parser = new DOMParser();
  const doc = parser.parseFromString(input, "text/html");
  //find all script tags
  const scripts = doc.getElementsByTagName('script');
  for (const script of scripts)
    script.remove(); //remove from the DOM
  return doc.body.textContent.trim();
}
console.log(sanitise("hello <script>alert('I am stealing your data');</scr"+"ipt>"));

0
0 Comments

问题的原因是,作者想要从一个字符串中完全删除一个标签,作者提到不应该使用正则表达式来完成这个任务,而是应该使用DOM解析器的功能。作者给出了一个使用JavaScript的解决方法,首先创建一个元素作为容器,将字符串赋值给这个元素的innerHTML属性,这样可以避免执行其中的脚本。然后使用querySelectorAll方法找到所有的”放入javascript字符串中?">如何将“”放入javascript字符串中?