HtmlPurifier повторяет ссылки

Я использую HTMLPurifier со своей системой, и по какой-то причине он преобразует что-то вроде этого:

<div class="item-horizontal mrb14" id="traditional">
<a href="/" title="Traditional">
<h3>Traditional</h3>
</a>
</div>

во что-то вроде этого:

<div class="item-horizontal mrb14" id="anchor-traditional">
    <a href="/" title="Traditional"></a>
    <h3><a href="/" title="Traditional">Traditional</a></h3>
    <a href="/" title="Traditional"></a>
</div>

Любая идея, что я должен добавить в конфигурацию? - моя текущая установка:

require_once('HTMLPurifier.auto.php');
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'XHTML 1.0 Transitional');
$config->set('Attr.AllowedFrameTargets', array('_blank'));
$config->set('HTML.Trusted', true);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('Filter.Custom',  array( new HTMLPurifier_Filter_SafeIframe() ));
$config->set('Attr.EnableID', true);
$config->set('Attr.IDPrefix', 'anchor-');
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'href*', 'URI');
$def->addAttribute('a', 'rel', 'CDATA');
$objPurifier = new HTMLPurifier($config);
return $objPurifier->purify($string);

person user398341    schedule 27.10.2011    source источник


Ответы (1)


Вы вкладываете блочный элемент h3 в тег anchor (a), который является встроенным элементом. Если вы используете html5, это прекрасно, но с xhtml 1.0 в качестве типа документа это не так.

Вот пример на html5doctor.

Правка. Поиск в Google привел меня к этому сообщению, в котором подчеркивается мой подозрение

person and_the_rand    schedule 27.10.2011
comment
Я использую html5, но htmlpurifier пока не поддерживает html5, поэтому XHTML 1.0 Transitional кажется одной из возможностей, которые я могу использовать при установке типа документа. - person user398341; 27.10.2011
comment
Я только что нашел это как-то связанное post. Так что я думаю, вам нужно реструктурировать код. Но на самом деле я никогда не использовал HtmlPurifier, так что могу ошибаться. РЕДАКТИРОВАТЬ: мне жаль, что ссылка на пост устарела, поэтому, пожалуйста, просто игнорируйте ее. - person and_the_rand; 27.10.2011
comment
Я имел в виду сообщение, на которое я ссылался в своем комментарии, а не ваш вопрос. Извините за путаницу. - person and_the_rand; 27.10.2011