首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTMLPurifier:自动br

HTMLPurifier:自动br
EN

Stack Overflow用户
提问于 2011-01-30 05:18:13
回答 1查看 1.3K关注 0票数 1

我可以如何获得:

代码语言:javascript
复制
<p>first<br>p</p>
<p>second p</p>

发自:

代码语言:javascript
复制
<p>first
p</p>
<p>second p</p>

使用HTMLPurifier?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-22 20:43:38

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

如果您真的想用HTML Purifier来解决这个问题,那么您可以通过编写一个扩展HTMLPurifier_AttrDef_Text的类来编写一个执行nl2brstr_replace的textnode转换。伪码:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
$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定义可能已经很高兴地使用了HTMLPurifier_AttrDef_Text实例。

看看这对你有没有帮助?

在HTML Purifier论坛上也有一个帖子(是你发起的吗?我不会感到惊讶)- nl2br, auto insertion。如果你找到了解决方案,你可以在那里发布你的答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4839489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档