очистка рельсов выскакивает из тега <p>

0

У меня есть следующий код

<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>?

  • 1
    Так что я думал, что понял это, но сюжет утолщен. На вкладке элемента разработчика Chrome отображается очищенный HTML-код после тега заключенного абзаца. Когда я иду, чтобы просмотреть исходный код, код выглядит нормально (очищенный HTML-код находится внутри тега абзаца). Когда я пытаюсь получить доступ к узлу через JQuery в консоли разработчика Chrome, он обрабатывает узел так, как будто его нет в теге абзаца.
Теги:
ruby-on-rails-3
sanitize
html-sanitizing

3 ответа

1
Лучший ответ

Вложенные теги абзаца не являются законными; <p> принимает только те метки содержимого.

Вот почему инструменты Chrome dev показывают измененный порядок - браузер исправляет ошибку настолько хорошо, насколько это возможно, и перемещает внутренний <p> и рядом с ним.

0

Причина, по которой <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

  • 0
    Они не ожидают удаления тега <p> . Они ожидают, что он будет отображаться как дочерний ( <p><p></p></p> ), тогда как Chrome вместо этого отображает его как братьев и сестер ( <p></p><p></p> ).
0

Это спецификация HTML. Список не должен быть в тегах абзацев.

Подробнее об этом здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню