Search code examples
phphtmlpurifier

HTMLPurifier - adding to ignore list


I am trying to pass some XML tags (abcdef>) through htmlpurifier. Since the tags itself are not supported, I am trying to add an element first and then adding it to allowedElements. However this is not working, i'm just getting a blank page. Any ideas please on what I am doing wrong, or if there is an easier way to achieve what i am looking for.

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

Let know if anyone needs any other details.

Note: The library is working fine without adding the elements.


Solution

  • You should turn on error reporting; makes dev a lot easier!

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

    Fixing a bunch of errors (the "cannot edit configuration after finalization means all your configs need to be before you getHTMLDefinition; deprecated API means that you should change your config set format but is harmless), then you get a blank string. Then you need to make sure your new elements are in the allowed elements of someone else, an easy way to do this is mark them Inline. I doubt the AllowedElements attribute is what you want, because it will exclude all other elements...

    <?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');