У меня есть следующий код
<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>
как и следовало ожидать.
Почему sanitizing html между <p></p>
удаляет сатинизированный html из закрывающего тега и помещает его после закрывающего тега?
Как получить дезинфицированный html для отображения в <p></p>
?
Вложенные теги абзаца не являются законными; <p>
принимает только те метки содержимого.
Вот почему инструменты Chrome dev показывают измененный порядок - браузер исправляет ошибку настолько хорошо, насколько это возможно, и перемещает внутренний <p>
и рядом с ним.
Причина, по которой <p>
не удаляются методами sanitize, заключается в том, что <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
<p>
. Они ожидают, что он будет отображаться как дочерний ( <p><p></p></p>
), тогда как Chrome вместо этого отображает его как братьев и сестер ( <p></p><p></p>
).
Это спецификация HTML. Список не должен быть в тегах абзацев.
Подробнее об этом здесь