javascript - 尝试使用 .innerHTML 呈现内容时,如何过滤除 b、u 和 i 之外的所有其他标签

标签 javascript html dom

我正在使用 textarea 收集表单中的文本,并计划使用 .innerHTML 呈现该文本以便用户可以将内容设置为粗体、斜体和下划线。我可能会决定增加灵 active 以允许使用样式属性的彩色文本。
我考虑过使用正则表达式来匹配文本,但我希望有一个更优雅的解决方案。
这是我目前拥有的

      <div class="fullblog-container">
        <textarea name="title" id="fullblogTitle"></textarea>
      </div>
      <button class="addBlock" onclick="submitBlocks()">SUBMIT</button>
       const fullBlogContainer = document.querySelector(".fullblog-container");
      function submitBlocks() {
        const allChildren = Array.from(fullBlogContainer.children);
        const filterChildren = allChildren.filter((elem) => elem.tagName != "BUTTON");
        console.log(filterChildren[0].value);
      }

上面的代码从我所有的文本区域(目前只有 1 个文本区域)获取输出。
我计划使用 .innerHTML 渲染该值并希望保留 b、u、i 标签和可能带有样式属性的 div 标签,并将其余部分视为文本。
编辑:虽然我的问题导致防止注入(inject)攻击(存在类似问题),但我需要一种方法将某些部分呈现为文本,将其他部分呈现为 html,但我还没有找到合适的解决方案。
PS:请不要使用 JQuery

最佳答案

一种方法是将所有元素转换为您想要允许的文本和白名单元素。与 innerText浏览器将所有 html 实体转换为它们的代码。然后您可以使用 innerHTML 读取实际代码并替换列入白名单的元素。

const dangerousContent = '\<script\>dangerousFunction()\</script\>';
const content = 'Text \<b\>bold\</b\> \<i\>italic\</i\>  \<u\>underline\</u\>';

const container = document.getElementById('container');

container.innerText += dangerousContent;
container.innerText += content;
container.innerHTML = container.innerHTML
                               .replace(/&lt;b&gt;/g, '\<b\>')
                               .replace(/&lt;\/b&gt;/g, '\</b\>')
                               .replace(/&lt;i&gt;/g, '\<i\>')
                               .replace(/&lt;\/i&gt;/g, '\</i\>')
                               .replace(/&lt;u&gt;/g, '\<u\>')
                               .replace(/&lt;\/u&gt;/g, '\</u\>');
<span id="container"></span>

关于javascript - 尝试使用 .innerHTML 呈现内容时,如何过滤除 b、u 和 i 之外的所有其他标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67983790/

相关文章:

javascript - Jquery 将整数转换为字符串并返回

javascript - 如何命名 jQuery 函数以使浏览器的后退按钮起作用?

java - 是否可以取消网络浏览器的装饰?

javascript - 使用 HTML slider 元​​素传递变量 ondrag

jquery - 如何在查询 slider 中添加指向图像的超链接

javascript - 从对象中设置元素的样式

javascript - 轻松清除所有脚本设置变量 (Javascript/jQuery)

javascript - Node.js 行被跳过然后被处理

javascript - 如何限制jquery循环中的点击事件?

javascript - 如何用与 Internet Explorer 兼容的表格替换子 DOM 元素?