我有以下代码
<p>
<%= sanitize "<p>This is a test</p>" %>
</p>
我预计已清理的html会显示在<p></p>
之间。但它会产生。
<p>
</p>
<p>This is a test</p>
当我将封闭的<p></p>
更改为<div></div>
时,已清理的html会显示在<div></div>
之间,如我所料。
为什么在<p></p>
之间清理html从封闭标记中删除已清理的html并将其放在封闭标记之后?
如何让清理后的html显示在<p></p>
?
答案 0 :(得分:1)
嵌套段落标签不合法; <p>
代码只接受phrasing content tags。
这就是Chrome开发工具显示更改顺序的原因 - 浏览器会尽可能纠正错误,并将内部<p>
移到其旁边。
答案 1 :(得分:0)
这是HTML规范的事情。列表不应该在段落标签中。
更多相关内容 here
答案 2 :(得分:0)
清除方法未删除<p>
的原因是<p>
标记位于默认允许标记列表中。
完整列表是:
del, dd, h3, address, big, sub, tt, a, ul, h4, cite, dfn, h5, small, kbd, code,
b, ins, img, h6, sup, pre, strong, blockquote, acronym, dt, br, p, div, samp,
li, ol, var, em, h1, i, abbr, h2, span, hr
更多信息:http://apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize