/** * Retrieves an instance of the application-wide configuration definition. */ public static function instance($prototype = null) { if ($prototype !== null) { HTMLPurifier_ConfigSchema::$singleton = $prototype; } elseif (HTMLPurifier_ConfigSchema::$singleton === null || $prototype === true) { HTMLPurifier_ConfigSchema::$singleton = HTMLPurifier_ConfigSchema::makeFromSerial(); } return HTMLPurifier_ConfigSchema::$singleton; }
/** * @param string|array|HTMLPurifier_Config $config * @param HTMLPurifier_ConfigSchema $schema * @return HTMLPurifier_Config */ public static function create($config = null, HTMLPurifier_ConfigSchema $schema = null) { if (!$schema instanceof HTMLPurifier_ConfigSchema) { $schema = HTMLPurifier_ConfigSchema::makeFromSerial(); } if ($config instanceof HTMLPurifier_Config) { $configObj = $config; } else { $configObj = new HTMLPurifier_Config($schema); $configObj->set('Core.Encoding', 'UTF-8'); $configObj->set('HTML.Doctype', 'HTML 4.01 Transitional'); if (is_string($config)) { $configObj->loadIni($config); } elseif (is_array($config)) { $configObj->loadArray($config); } } $def = $configObj->getHTMLDefinition(true); // this finalizes config HTMLPurifier_HTML5Definition::setup($def); return $configObj; }
/** * use html purifier to remove 'bad' tags/attributes from html body * * @param string $_content * @param string $messageId * @return string */ protected function _purifyBodyContent($_content, $messageId) { if (!defined('HTMLPURIFIER_PREFIX')) { define('HTMLPURIFIER_PREFIX', realpath(dirname(__FILE__) . '/../../library/HTMLPurifier')); } $config = Tinebase_Core::getConfig(); $path = $config->caching && $config->caching->active && $config->caching->path ? $config->caching->path : Tinebase_Core::getTempDir(); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Purifying html body. (cache path: ' . $path . ')'); } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Current mem usage before purify: ' . memory_get_usage() / 1024 / 1024); } // add custom schema for passing message id to URIScheme $configSchema = HTMLPurifier_ConfigSchema::makeFromSerial(); $configSchema->add('Felamimail.messageId', NULL, 'string', TRUE); $config = HTMLPurifier_Config::create(NULL, $configSchema); $config->set('HTML.DefinitionID', 'purify message body contents'); $config->set('HTML.DefinitionRev', 1); // @see: http://htmlpurifier.org/live/configdoc/plain.html#Attr.EnableID $config->set('Attr.EnableID', TRUE); $config->set('Attr.IDPrefix', 'felamimail_inline_'); // @see: http://htmlpurifier.org/live/configdoc/plain.html#HTML.TidyLevel $config->set('HTML.TidyLevel', 'heavy'); // some config values to consider /* $config->set('Attr.EnableID', true); $config->set('Attr.ClassUseCDATA', true); $config->set('CSS.AllowTricky', true); */ $config->set('Cache.SerializerPath', $path); $config->set('URI.AllowedSchemes', array('http' => true, 'https' => true, 'mailto' => true, 'data' => true, 'cid' => true)); $config->set('Felamimail.messageId', $messageId); $this->_transformBodyTags($config); // add uri filter $uri = $config->getDefinition('URI'); $uri->addFilter(new Felamimail_HTMLPurifier_URIFilter_TransformURI(), $config); // add cid uri scheme require_once dirname(dirname(__FILE__)) . '/HTMLPurifier/URIScheme/cid.php'; $purifier = new HTMLPurifier($config); $content = $purifier->purify($_content); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Current mem usage after purify: ' . memory_get_usage() / 1024 / 1024); } return $content; }
<?php chdir(dirname(__FILE__)); //require_once '../library/HTMLPurifier.path.php'; shell_exec('php ../maintenance/generate-schema-cache.php'); require_once '../library/HTMLPurifier.path.php'; require_once 'HTMLPurifier.includes.php'; $begin = xdebug_memory_usage(); $schema = HTMLPurifier_ConfigSchema::makeFromSerial(); echo xdebug_memory_usage() - $begin; // vim: et sw=4 sts=4