【问题标题】:Allowing full html to be parsed in HTMLPurifier允许在 HTMLPurifier 中解析完整的 html
【发布时间】:2014-06-04 12:06:24
【问题描述】:

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

我想要什么:保留 HTML 、 HEAD 、 STYLE 、 BODY TAGS

我做了什么:

$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());

    }

【问题讨论】:

  • 您基本上需要更改白名单以允许更多内容。你读过htmlpurifier.org/docs#toclink1吗?
  • 净化器去除了一些东西,但你没有说你想用它去除什么以及你期望的结果是什么。请澄清您的问题并向我们展示您的尝试。
  • 已添加,以上是我目前使用的方法

标签: php html htmlpurifier


【解决方案1】:

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

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

【讨论】:

  • PHP 的 strip_tags 不是防止 XSS 攻击的安全方法。除了 HTML 标签之外,它还剥离了许多其他内容。
【解决方案2】:

你需要

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

无论出于何种原因,Core.ConvertDocumentToFragment 默认为 true,即使文档声明为 "for most inputs, this processing is not necessary"

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

【讨论】:

    【解决方案3】:

    最终结果 - HTMLPurfier 本身不允许完整的 HTML 解析 - 扩展它或找到通过

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2011-04-18
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      相关资源
      最近更新 更多