HtmlPurifier — разрешить данные

Я пытаюсь позволить некоторым data-attribute с htmlPurifier для всех моих span но никак …

У меня есть эта строка:

<p>
<span data-time-start="1" data-time-end="5" id="5">
<word class="word">My</word>
<word class="word">Name</word>
</span>
<span data-time-start="6" data-time-end="15" id="88">
<word class="word">Is</word>
<word class="word">Zooboo</word>
</span>
<p>

Мой конфиг htmlpurifier:

$this->HTMLpurifierConfigInverseTransform = \HTMLPurifier_Config::createDefault();
$this->HTMLpurifierConfigInverseTransform->set('HTML.Allowed', 'span,u,strong,em');
$this->HTMLpurifierConfigInverseTransform->set('HTML.ForbiddenElements', 'word,p');
$this->HTMLpurifierConfigInverseTransform->set('CSS.AllowedProperties', 'font-weight, font-style, text-decoration');
$this->HTMLpurifierConfigInverseTransform->set('AutoFormat.RemoveEmpty', true);

Я очищаю свой $value как это:

$purifier = new \HTMLPurifier($this->HTMLpurifierConfigInverseTransform);
var_dump($purifier->purify($value));die;

И получите это:

<span>My Name</span><span>Is Zoobo</span>

Но как сохранить мои атрибуты данных id, data-time-start, data-time-end в моем span ?

Мне нужно иметь это:

<span data-time-start="1" data-time-end="5" id="5">My Name</span data-time-start="6" data-time-end="15" id="88"><span>Is Zoobo</span>

Я попытался проверить с этим конфигом:

$this->HTMLpurifierConfigInverseTransform->set('HTML.Allowed', 'span[data-time-start],u,strong,em');

но сообщение об ошибке:

Предупреждение пользователя: атрибут ‘data-time-start’ в элементе ‘span’ не
поддерживается (для получения информации о реализации этого см. поддержку
форумы)

Спасибо за вашу помощь !!

РЕДАКТИРОВАТЬ 1

Я попытался разрешить ID в первый раз с этой строкой кода:

$this->HTMLpurifierConfigInverseTransform->set('Attr.EnableID', true);

Это не работает для меня …

РЕДАКТИРОВАТЬ 2

За data-* атрибуты, я добавляю эту строку, но ничего не произошло тоже …

$def = $this->HTMLpurifierConfigInverseTransform->getHTMLDefinition(true);
$def->addAttribute('sub', 'data-time-start', 'CDATA');
$def->addAttribute('sub', 'data-time-end', 'CDATA');

7

Решение

HTML Purifier знает о структуре HTML и использует эти знания в качестве основы своего процесса белого списка. Если вы добавляете стандартный атрибут в белый список, он не допускает произвольного содержимого для этого атрибута — он понимает атрибут и все равно будет отклонять контент, который не имеет смысла.

Например, если у вас где-то есть атрибут, который принимает числовые значения, очиститель HTML все равно будет запрещать HTML, который пытается ввести значение «foo» для этого атрибута.

Если вы добавляете пользовательские атрибуты, простое добавление их в белый список не учит HTML-очистителю, как обрабатывать атрибуты: какие данные можно ожидать в этих атрибутах? Какие данные являются вредоносными?

Есть обширная документация, как вы можете рассказать HTML Purifier о структуре ваших пользовательских атрибутов здесь: Настроить

Есть пример кода для атрибута ‘target’ <a>-тег:

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial');
$config->set('HTML.DefinitionRev', 1);
$config->set('Cache.DefinitionImpl', null); // remove this later!
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');

Что бы добавить target как поле, которое принимает только значения "_blank", "_self", "_target" а также "_top", Это немного строже, чем фактическое определение HTML, но для большинства целей вполне достаточно.

Это общий подход, который вы должны будете использовать для data-time-start а также data-time-end, Для возможной конфигурации, ознакомьтесь с официальной документацией HTML Purifier (как указано выше). Мое лучшее предположение из вашего примера, что вы не хотите Enum#... но Number, как это…

$def->addAttribute('span', 'data-time-start', 'Number');
$def->addAttribute('span', 'data-time-end', 'Number');

…но проверьте это и посмотрите, что подходит вашему варианту использования лучше всего. (Пока вы реализуете это, не забывайте, что вам также нужно перечислить атрибуты в белый список, как вы это делаете в настоящее время.)

За id, вы должны включить Attr.EnableID = true как часть вашей конфигурации.

Надеюсь, это поможет!

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]