Обход специальной очистки HTML в html5lib / bleach
Я использую bleach
, который использует html5lib
очистить пользовательский контент, который представляет собой фрагменты HTML, разработанные как dust.js
шаблоны
все работало нормально, кроме этой ситуации
вход:
<table>
{#loop}
<tr>
<td>{name}</td>
</tr>
{/loop}
</table>
выход:
{#loop}
{/loop}
<table>
<tr>
<td>{name}</td>
</tr>
</table>
зацикливающиеся теги упорядочены за пределами таблицы. это имеет смысл - html5lib исправляет мой html; содержимое не должно быть в структуре таблицы, если оно не заключено в тег td / th. Я обычно хочу, чтобы такие исправления происходили, и все же хочу, чтобы исправления происходили, но мне интересно, есть ли способ как-то пройти через эти теги.
кто-нибудь сталкивался с подобной ситуацией в прошлом и был в состоянии подавить это поведение дезинфекции?
Единственный подход, который я придумала до сих пор, - это обернуть элементы управления в тег, который я могу вычленить:
<table>
<tr data-layout=""><td>{#loop}</td></tr>
<tr>
<td>{name}</td>
</tr>
<tr data-layout=""><td>{/loop}</td></tr>
</table>
проблема с этим подходом заключается в том, что, как только я отыграл этот хак форматирования, я не могу легко встроить его обратно. Закодированный шаблон становится недоступным для редактирования.
2 ответа
Это вовсе не связано с очисткой, речь идет о синтаксическом анализе (согласно спецификации!). Foster-parenting - это то, как анализатор HTML обрабатывает большую часть контента непосредственно внутри элемента таблицы; чтобы изменить это, вы должны изменить парсер в html5parser.py
, html5lib стремится реализовать соответствующий анализатор HTML - у него нет API, чтобы сделать его не соответствующим.
Bleach имеет встроенные теги / атрибуты белого списка. Однако вы можете расширить или переопределить существующие теги / атрибуты белого списка. Ниже приведен пример того, как вы можете добавить пользовательские теги к существующему "Белому списку";
bleach.ALLOWED_TAGS.extend( ['{#*}' , '{/*}' ] )
Просто bleach пометит теги "{#loop} {/loop}", чтобы избежать.
** Официальная документация Bleach содержит подробную информацию о том, как определять теги / атрибуты белого списка с подстановочными знаками.