防止自定义(损坏的)HTML破坏页面的其余部分

线虫

我使用的产品支持用户以markdown格式提供自定义描述(这是新产品,以前他们只能提供原始html)。不幸的是,许多用户已经使用该产品多年,因此,许多描述都由标记组成,这些标记包括“某种作品”或“ IE8中的作品”。

我并不特别在乎他们的描述是否由于损坏而无法正确显示,我担心的是不应因此而破坏页面的其余部分。

破解代码示例

<ul>
</li>
    <li>foo</li>
    <li>bar</li>
</li>
<!-- no closing ul -->

我为减轻影响所做的事情

  • 我删除了以下标签:html头体样式frameset框架iframe脚本markdown-rendered
  • 环绕描述<markdown-rendered>作为一种包含代码的方式。

即使采取了这些缓解措施,上面示例中的代码仍然会“爆发”。对于上面的示例,大量标记在ul内移动之后。我还能做什么来“包含”不良标记?

桑普森

将无效标记注入文档后,将对其进行解析和修复,以达到浏览器的最佳性能。我建议事先进行此操作,并注入此操作结果,而不要允许此操作潜在地破坏您先前存在的结构。

过去,库和框架执行此操作的一种方法是创建一些临时结构,将无效标记分配为innerHTML,然后读回innerHTML

var markup = clean( "<ul></li><li>foo</li><li>bar</li></li>" );

console.log( markup ); // "<ul><li>foo</li><li>bar</li></ul>"

function clean ( invalid ) {
    var container = document.createElement( "div" );
    return ( container.innerHTML = invalid ), container.innerHTML;
}

分配标记后,将对其进行解析,修复并构造为实际的DOM对象。当我们读回innerHTML时,我们将直接从浏览器中获得漂亮干净的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PHP if语句停止加载HTML页面的其余部分

如何防止 CSS 动画移动我页面的其余部分?

如何防止引导导航栏与页面的其余部分一起滚动

如何在html / css中使导航栏与页面的其余部分没有空间?

CSS规则泄漏到页面的其余部分

如何使导航栏与页面的其余部分重叠?

jsp:include会删除页面的其余部分吗?

页面其余部分的CSS

在关闭自定义警报框之前,如何防止用户访问页面的其他部分?

如何在使html页面的其余部分变暗的同时保持悬停区域的背景颜色/不透明度?

如何使html页面的一个区域重定向到另一个url,而页面的其余部分保持不变?

在spring数据其余部分中处理自定义POST PUT和PATCH请求中的关联条目

jQuery找到所有具有自定义属性的元素,并获取其其余部分的名称和值

如何使部分可滚动并且与页面的其余部分一样高?

使CSS标签在悬停时弹出,而无需将页面的其余部分向下推

如何使粘性div漂浮在页面的其余部分上?

使一个非常宽的 div 水平滚动而不影响页面的其余部分

让摩纳哥编辑器填充页面的其余部分(跨浏览器)

使代码镜像块填充 Safari 中页面的其余部分

固定导航栏在向下滚动时被页面的其余部分覆盖

具有自适应高度的iframe,适合页面的“其余部分”

ListView 到达结束然后停止滚动并开始滚动页面的其余部分 Flutter

为什么MySQLi停止了我页面的其余部分的解析并停止了我的PHP脚本?

如何在不将页面的其余部分向下推的情况下显示模态?

与页面其余部分的重叠列表

自定义页面的URL映射

Liferay管理页面的自定义

在继续运行本手册的其余部分之前,如何存储有关远程主机的自定义事实?

写在自定义安装程序页面的标题部分(不带 MUI)