HTMLPurifier:自动净化器

发布于 2024-10-15 02:18:35 字数 225 浏览 3 评论 0 原文

我如何

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

获取: from :?

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

使用 HTMLPurifier

How i can get:

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

from:

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

using HTMLPurifier?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七七 2024-10-22 02:18:35

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

如果您真的决定使用 HTML Purifier 解决这个问题,您也许可以编写一个执行 < 的 textnode 转换a href="http://php.net/nl2br" rel="nofollow">nl2brHTMLPurifier_AttrDef_Text 的类来实现“nofollow">str_replace。伪代码:

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(实际上它是理智的)。那么这种方法你就不走运了。您必须找到一种方法来注入
    节点。
  2. 在这个过程中可能为时已晚,无法为您提供所需的控件 - 更改文本节点“模板”(可以这么说),但实际的 HTML 定义可能已经很高兴地使用 HTMLPurifier_AttrDef_Text 实例。

看看这对你有帮助吗?

HTML Purifier 论坛上还有一个帖子(您启动了吗?我不会感到惊讶)- nl2br,自动
>插入
。如果您找到解决方案,您可以在那里发布您的答案。

I'm not sure about the specifics, but since this question has no answers, see if these pointers help you:

If you're really set on solving this with HTML Purifier, you might be able to write a textnode transformation that does an nl2br or str_replace by writing a class that extends HTMLPurifier_AttrDef_Text. Pseudocode:

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);
    }
}

Then you'd inject your class into 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()
);

Caveats:

  1. The Text AttrDef may be htmlspecialchars()-ed (it'd be sane, really). Then you're out of luck with that approach. You'd have to find a way to inject a <br /> node, instead.
  2. That might be too late in the process to give you the control you want - that changes the text nodes 'template' (so to speak), but the actual HTML definition might already happily be making use of a HTMLPurifier_AttrDef_Text instance.

See if that helps you at all?

There's also a thread on the HTML Purifier forum (did you start it? I wouldn't be surprised) - nl2br, auto <br /> insertion. If you find a solution, you could post your answer there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文