代码之家  ›  专栏  ›  技术社区  ›  pinaki

HTML净化器-添加到忽略列表

  •  1
  • pinaki  · 技术社区  · 15 年前

    我正在尝试通过html净化器传递一些XML标记(abcdef>)。由于不支持标记本身,所以我尝试先添加一个元素,然后再将其添加到allowedelements。但是这不起作用,我只是得到一个空白页。任何关于我做错了什么的想法,或者是否有一个更容易的方法来实现我所寻找的。

    $config = HTMLPurifier_Config::createDefault();
    $config->set('Core', 'Encoding', "UTF-8");
    $config->set('HTML', 'DefinitionID', 'pinaki-test');
    $config->set('HTML', 'DefinitionRev', 3);
    $config->set('Cache', 'DefinitionImpl', null); // remove this later!
    $config->set('Cache', 'SerializerPath', "/var/cache/htmlpurify");
    $def = $config->getHTMLDefinition(true);
    $def->addElement("tag1", false, 'Empty', 'Common', array());
    $def->addElement("tag2", false, 'Empty', 'Common', array());
    $config->set('HTML', 'AllowedElements', array("tag1", "tag2"));
    

    如果有人需要其他细节,请告知。

    注: 库在不添加元素的情况下工作正常。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Edward Z. Yang    15 年前

    你应该打开错误报告;让开发人员更容易!

    ini_set('display_errors', true);
    error_reporting(E_ALL & ~E_NOTICE); // or E_ALL if you're feeling good
    

    修复一系列错误(定稿后无法编辑配置意味着在gethtmldefinition之前需要进行所有配置;不推荐使用的API意味着您应该更改配置集格式,但这是无害的),然后得到一个空字符串。然后,您需要确保您的新元素在其他人的允许元素中,一个简单的方法是将它们标记为内联。我怀疑allowedElements属性是您想要的,因为它将排除所有其他元素…

    <?php
    require_once 'library/HTMLPurifier.auto.php';
    $config = HTMLPurifier_Config::createDefault();
    $config->set('Core.Encoding', "UTF-8");
    $config->set('HTML.DefinitionID', 'pinaki-test');
    $config->set('HTML.DefinitionRev', 3);
    $config->set('Cache.DefinitionImpl', null); // remove this later!
    $config->set('Cache.SerializerPath', "/var/cache/htmlpurify");
    $config->set('HTML.AllowedElements', array("tag1", "tag2"));
    $def = $config->getHTMLDefinition(true);
    $def->addElement("tag1", 'Inline', 'Empty', 'Common', array());
    $def->addElement("tag2", 'Inline', 'Empty', 'Common', array());
    $purifier = new HTMLPurifier($config);
    echo $purifier->purify('<tag1>asf');