允许在 HTMLPurifier 中解析完整的 html

问题描述 投票:0回答:4

这是我长期以来遇到的问题 - 我目前接受用户的完整 html 页面作为输入,并希望过滤/清理它。 HTMLpurifier 的问题在于它删除了 head 、 html 和 body 标签 - 以及 head 中的样式。我已经谷歌,查看了论坛,尝试实现所写的内容,但没有成功。有人可以帮忙吗?

我想要的:保留 HTML 、 HEAD 、 STYLE 、 BODY 标签

我做了什么:

$config->set('HTML.DefinitionID', 'test');
    $config->set('HTML.DefinitionRev', 1);
    $config->set('HTML.AllowedElements', array('html','head', 'body', 'style', 'div', 'p'));    

    if ($def = $config->maybeGetRawHTMLDefinition()) {
        $def->addElement('html', 'Block', 'Inline', 'Common', array());
        $def->addElement('head', 'Block', 'Inline', 'Common', array());
        $def->addElement('style', 'Block', 'Inline', 'Common', array());
        $def->addElement('body', 'Block', 'Inline', 'Common', array());

    }
php html htmlpurifier
4个回答
0
投票

为什么不使用strip_tags?它支持允许的标签列表。

http://www.php.net/manual/en/function.strip-tags.php


0
投票

你需要

$config->set('Core.ConvertDocumentToFragment', false);

无论出于何种原因,

Core.ConvertDocumentToFragment
默认为
true
,即使文档指出“对于大多数输入,此处理是不必要的”

我也被这个困扰了。我从错误收集器得到的只是神秘的消息“已删除文档元数据标签”,而该消息又是内部消息“Lexer:提取的正文”的翻译。


0
投票

最终结果 - HTMLPurfier 本身不允许完整的 HTML 解析 - 要么扩展它,要么找到一个直通通道


0
投票

这需要一些工作,但可以自己实现。

所有步骤在这里解释起来都太多了,但我遇到了完全相同的问题。我想将 HTML 内容作为整个文档进行清理,并且必须找出困难的方法,即该库在幕后是如何工作的。

简而言之:

  • 有些设置需要调整
  • 必须添加和配置自定义元素和属性

我已经根据博客中的商店软件示例解释了我的用例的方法:https://machinateur.dev/blog/how-to-sanitize-full-html-5-documents-with-htmlpurifier .

© www.soinside.com 2019 - 2024. All rights reserved.