HTMLPurifier:auto br

时间:2011-01-29 21:18:13

标签: html htmlpurifier

我如何得到:

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

从:

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

使用HTMLPurifier?

1 个答案:

答案 0 :(得分:3)

我不确定具体细节,但由于这个问题没有答案,看看这些指针是否对你有帮助:

如果您真的开始使用HTML Purifier解决此问题,您可以通过编写扩展HTMLPurifier_AttrDef_Text的类来编写执行nl2brstr_replace的textnode转换。伪代码:

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:

$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. Text AttrDef可能是htmlspecialchars() - ed(它确实是理智的)。然后你对这种方法运气不好。您必须找到一种方法来注入<br />节点。
  2. 在过程中为你提供你想要的控制可能为时已晚 - 这会改变文本节点的模板(可以这么说),但实际的HTML定义可能已经乐于使用{{1} } instance。
  3. 看看这对你有帮助吗?

    HTML Purifier论坛上还有一个帖子(你开始了吗?我不会感到惊讶) - nl2br, auto <br /> insertion。如果您找到解决方案,可以在那里发布答案。