Я не уверен насчет специфики, но поскольку на этот вопрос нет ответов, посмотрите, помогут ли вам эти указатели:
Если вы действительно решили решить эту проблему с помощью 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()
);
Предостережения:
- Текст AttrDef может быть
htmlspecialchars()
(это было бы нормально, правда).Тогда вам не повезло с таким подходом.Вместо этого вам нужно будет найти способ внедрить <br />
узел. - Возможно, в процессе будет слишком поздно, чтобы дать вам нужный элемент управления - который изменяет текстовый узел 'template' (такговорить), но фактическое определение HTML уже, возможно, уже успешно использует
HTMLPurifier_AttrDef_Text
экземпляр.
Посмотрите, поможет ли это вам вообще?
Есть также поток нафорум по очистке HTML (вы его начали? Я не удивлюсь) - nl2br, auto <br /> insertion
.Если вы найдете решение, вы можете опубликовать свой ответ там.