HTMLPurifier - adding to ignore list

2019-07-29 18:02发布

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.

1条回答
干净又极端
2楼-- · 2019-07-29 18:47

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');
查看更多
登录 后发表回答