config = HTMLPurifier_Config::create ( $config ); $this->strategy = new HTMLPurifier_Strategy_Core (); } /** * Adds a filter to process the output. * First come first serve * * @param HTMLPurifier_Filter $filter * HTMLPurifier_Filter object */ public function addFilter($filter) { trigger_error ( 'HTMLPurifier->addFilter() is deprecated, use configuration directives' . ' in the Filter namespace or Filter.Custom', E_USER_WARNING ); $this->filters [] = $filter; } /** * Filters an HTML snippet/document to be XSS-free and standards-compliant. * * @param string $html * String of HTML to purify * @param HTMLPurifier_Config $config * Config object for this operation, * if omitted, defaults to the config object specified during this * object's construction. The parameter can also be any type * that HTMLPurifier_Config::create() supports. * * @return string Purified HTML */ public function purify($html, $config = null) { // :TODO: make the config merge in, instead of replace $config = $config ? HTMLPurifier_Config::create ( $config ) : $this->config; // implementation is partially environment dependant, partially // configuration dependant $lexer = HTMLPurifier_Lexer::create ( $config ); $context = new HTMLPurifier_Context (); // setup HTML generator $this->generator = new HTMLPurifier_Generator ( $config, $context ); $context->register ( 'Generator', $this->generator ); // set up global context variables if ($config->get ( 'Core.CollectErrors' )) { // may get moved out if other facilities use it $language_factory = HTMLPurifier_LanguageFactory::instance (); $language = $language_factory->create ( $config, $context ); $context->register ( 'Locale', $language ); $error_collector = new HTMLPurifier_ErrorCollector ( $context ); $context->register ( 'ErrorCollector', $error_collector ); } // setup id_accumulator context, necessary due to the fact that // AttrValidator can be called from many places $id_accumulator = HTMLPurifier_IDAccumulator::build ( $config, $context ); $context->register ( 'IDAccumulator', $id_accumulator ); $html = HTMLPurifier_Encoder::convertToUTF8 ( $html, $config, $context ); // setup filters $filter_flags = $config->getBatch ( 'Filter' ); $custom_filters = $filter_flags ['Custom']; unset ( $filter_flags ['Custom'] ); $filters = array (); foreach ( $filter_flags as $filter => $flag ) { if (! $flag) { continue; } if (strpos ( $filter, '.' ) !== false) { continue; } $class = "HTMLPurifier_Filter_$filter"; $filters [] = new $class (); } foreach ( $custom_filters as $filter ) { // maybe "HTMLPurifier_Filter_$filter", but be consistent with AutoFormat $filters [] = $filter; } $filters = array_merge ( $filters, $this->filters ); // maybe prepare(), but later for($i = 0, $filter_size = count ( $filters ); $i < $filter_size; $i ++) { $html = $filters [$i]->preFilter ( $html, $config, $context ); } // purified HTML $html = $this->generator->generateFromTokens ( // list of tokens $this->strategy->execute ( // list of un-purified tokens $lexer->tokenizeHTML ( // un-purified HTML $html, $config, $context ), $config, $context ) ); for($i = $filter_size - 1; $i >= 0; $i --) { $html = $filters [$i]->postFilter ( $html, $config, $context ); } $html = HTMLPurifier_Encoder::convertFromUTF8 ( $html, $config, $context ); $this->context = & $context; return $html; } /** * Filters an array of HTML snippets * * @param string[] $array_of_html * Array of html snippets * @param HTMLPurifier_Config $config * Optional config object for this operation. * See HTMLPurifier::purify() for more details. * * @return string[] Array of purified HTML */ public function purifyArray($array_of_html, $config = null) { $context_array = array (); foreach ( $array_of_html as $key => $html ) { $array_of_html [$key] = $this->purify ( $html, $config ); $context_array [$key] = $this->context; } $this->context = $context_array; return $array_of_html; } /** * Singleton for enforcing just one HTML Purifier in your system * * @param HTMLPurifier|HTMLPurifier_Config $prototype * Optional prototype * HTMLPurifier instance to overload singleton with, * or HTMLPurifier_Config instance to configure the * generated version with. * * @return HTMLPurifier */ public static function instance($prototype = null) { if (! self::$instance || $prototype) { if ($prototype instanceof HTMLPurifier) { self::$instance = $prototype; } elseif ($prototype) { self::$instance = new HTMLPurifier ( $prototype ); } else { self::$instance = new HTMLPurifier (); } } return self::$instance; } /** * Singleton for enforcing just one HTML Purifier in your system * * @param HTMLPurifier|HTMLPurifier_Config $prototype * Optional prototype * HTMLPurifier instance to overload singleton with, * or HTMLPurifier_Config instance to configure the * generated version with. * * @return HTMLPurifier @note Backwards compatibility, see instance() */ public static function getInstance($prototype = null) { return HTMLPurifier::instance ( $prototype ); } } // vim: et sw=4 sts=4