HTMLPurifier: авто бр - PullRequest
       5

HTMLPurifier: авто бр

1 голос
/ 30 января 2011

Как я могу получить:

<p>first<br>p</p>
<p>second p</p>

от

<p>first
p</p>
<p>second p</p>

с использованием HTMLPurifier?

1 Ответ

3 голосов
/ 22 февраля 2011

Я не уверен насчет специфики, но поскольку на этот вопрос нет ответов, посмотрите, помогут ли вам эти указатели:

Если вы действительно решили решить эту проблему с помощью HTML-очистителя, вы можетенаписать преобразование текстового узла, которое выполняет nl2br или str_replace, написав класс, расширяющий HTMLPurifier_AttrDef_Text.Псевдокод:

class HTMLPurifier_AttrDef_Text_Linebreaks extends HTMLPurifier_AttrDef_Text
{
    public function validate($string, $config, $context) {
        $string = parent::validate($string, $config, $context);
        return str_replace("\n", "<br />", $string);
    }
}

Тогда вы добавите свой класс в очиститель HTML:

$purifier->set('HTML.DefinitionID', 'aNameForYourDefinition');
$purifier->set('HTML.DefinitionRev', 1);
//$purifier->set('Cache.DefinitionImpl', null);
$htmlDef = $purifier->config->getHTMLDefinition();
$htmlDef->manager->attrTypes->set(
     'Text',
     new HTMLPurifier_AttrDef_Text_Linebreaks()
);

Предостережения:

  1. Текст AttrDef может быть htmlspecialchars()(это было бы нормально, правда).Тогда вам не повезло с таким подходом.Вместо этого вам нужно будет найти способ внедрить <br /> узел.
  2. Возможно, в процессе будет слишком поздно, чтобы дать вам нужный элемент управления - который изменяет текстовый узел 'template' (такговорить), но фактическое определение HTML уже, возможно, уже успешно использует HTMLPurifier_AttrDef_Text экземпляр.

Посмотрите, поможет ли это вам вообще?

Есть также поток нафорум по очистке HTML (вы его начали? Я не удивлюсь) - nl2br, auto <br /> insertion.Если вы найдете решение, вы можете опубликовать свой ответ там.

...