我将允许用户提交HTML,删除脚本和样式标签(ofc),但某些元素(如Bold和Italic)正在溢出用户内容所在的DIVision。如果他们忘了关闭他们,我的意思是。
示例:
用户提交:
I'm entering a <b>tunne----------------
页面最终如下:
<div>
I'm entering a <b>tunne----------------
</b><div><b> **rest of the page**
因此页面的其余部分变为粗体。我对这种行为感到困惑(为什么这些东西不留在他们的笼子里?)。我需要一个简洁的解决方案。我希望有一个笼子标签,但没有。使用iframe是非常不合适的。
有什么想法吗?我更愿意在不编写解析器的情况下解决这个问题,以找到未关闭的标签。
答案 0 :(得分:1)
不幸的是,没有办法强制浏览器为您解释不平衡标签。采取这种情况:
<b>foo <i>bar</b> baz</i>
是否应将标签留在原位并将其渲染为
foo bar baz
,或者浏览器是否认为<i>
标记是子标记并移动其结束标记?或者也许用户意味着<b>
是孩子并移动其结束标签?
如果您要允许用户标记并且您希望避免渲染问题,那么您可以计算打开/关闭标记的总数以确保它们达到平衡(如果不这样做,则删除所有标记) ,或采用像上面Horen的回答更加防弹的服务。
此外,允许用户提交HTML可能非常不明智。即使你将某些标签列入黑名单,也可能会有一大堆other exploits被打开。让用户输入受限制的Markdown或BBcode,然后将做允许的字符转换成HTML格式要好得多。
答案 1 :(得分:0)
您可以使用像php tidy这样的html清理程序来清理和修复您的源代码 AFAIK的另一个选择是HTML Purifier