'"', '&' => '&', '<' => '<', '>' => '>', ''' => '\'', ''' => '\'', ''' => '\'', ]; /** * Retrieves or sets the default Lexer as a Prototype Factory. * * By default HTMLPurifier_Lexer_DOMLex will be returned. There are * a few exceptions involving special features that only DirectLex * implements. * * @note The behavior of this class has changed, rather than accepting * a prototype object, it now accepts a configuration object. * To specify your own prototype, set %Core.LexerImpl to it. * This change in behavior de-singletonizes the lexer object. * * @param HTMLPurifier_Config $config * @return HTMLPurifier_Lexer * @throws HTMLPurifier_Exception */ public static function create($config) { if (!($config instanceof HTMLPurifier_Config)) { $lexer = $config; trigger_error( "Passing a prototype to\n HTMLPurifier_Lexer::create() is deprecated, please instead\n use %Core.LexerImpl", E_USER_WARNING ); } else { $lexer = $config->get('Core.LexerImpl'); } $needs_tracking = $config->get('Core.MaintainLineNumbers') || $config->get('Core.CollectErrors'); $inst = null; if (is_object($lexer)) { $inst = $lexer; } else { if (is_null($lexer)) { do { // auto-detection algorithm if ($needs_tracking) { $lexer = 'DirectLex'; break; } if (class_exists('DOMDocument') && method_exists('DOMDocument', 'loadHTML') && !extension_loaded('domxml') ) { // check for DOM support, because while it's part of the // core, it can be disabled compile time. Also, the PECL // domxml extension overrides the default DOM, and is evil // and nasty and we shan't bother to support it $lexer = 'DOMLex'; } else { $lexer = 'DirectLex'; } } while (0); } // do..while so we can break // instantiate recognized string names switch ($lexer) { case 'DOMLex': $inst = new HTMLPurifier_Lexer_DOMLex(); break; case 'DirectLex': $inst = new HTMLPurifier_Lexer_DirectLex(); break; case 'PH5P': $inst = new HTMLPurifier_Lexer_PH5P(); break; default: throw new HTMLPurifier_Exception( "Cannot instantiate unrecognized Lexer type " . htmlspecialchars($lexer) ); } } if (!$inst) { throw new HTMLPurifier_Exception('No lexer was instantiated'); } // once PHP DOM implements native line numbers, or we // hack out something using XSLT, remove this stipulation if ($needs_tracking && !$inst->tracksLineNumbers) { throw new HTMLPurifier_Exception( 'Cannot use lexer that does not support line numbers with ' . 'Core.MaintainLineNumbers or Core.CollectErrors (use DirectLex instead)' ); } return $inst; } public function __construct() { $this->_entity_parser = new HTMLPurifier_EntityParser(); } public function parseText($string, $config) { return $this->parseData($string, false, $config); } public function parseAttr($string, $config) { return $this->parseData($string, true, $config); } /** * Parses special entities into the proper characters. * * This string will translate escaped versions of the special characters * into the correct ones. * * @param string $string String character data to be parsed. * @return string Parsed character data. */ public function parseData($string, $is_attr, $config) { // following functions require at least one character if ($string === '') { return ''; } // subtracts amps that cannot possibly be escaped $num_amp = substr_count($string, '&') - substr_count($string, '& ') - ($string[strlen($string) - 1] === '&' ? 1 : 0); if (!$num_amp) { return $string; } // abort if no entities $num_esc_amp = substr_count($string, '&'); $string = strtr($string, $this->_special_entity2str); // code duplication for sake of optimization, see above $num_amp_2 = substr_count($string, '&') - substr_count($string, '& ') - ($string[strlen($string) - 1] === '&' ? 1 : 0); if ($num_amp_2 <= $num_esc_amp) { return $string; } // hmm... now we have some uncommon entities. Use the callback. if ($config->get('Core.LegacyEntityDecoder')) { $string = $this->_entity_parser->substituteSpecialEntities($string); } else { if ($is_attr) { $string = $this->_entity_parser->substituteAttrEntities($string); } else { $string = $this->_entity_parser->substituteTextEntities($string); } } return $string; } /** * Lexes an HTML string into tokens. * @param $string String HTML. * @param HTMLPurifier_Config $config * @param HTMLPurifier_Context $context * @return HTMLPurifier_Token[] array representation of HTML. */ public function tokenizeHTML($string, $config, $context) { trigger_error('Call to abstract class', E_USER_ERROR); } /** * Translates CDATA sections into regular sections (through escaping). * @param string $string HTML string to process. * @return string HTML with CDATA sections escaped. */ protected static function escapeCDATA($string) { return preg_replace_callback( '//s', array('HTMLPurifier_Lexer', 'CDATACallback'), $string ); } /** * Special CDATA case that is especially convoluted for #i', '', $html); } return $html; } /** * Takes a string of HTML (fragment or document) and returns the content * @todo Consider making protected */ public function extractBody($html) { $matches = array(); $result = preg_match('|(.*?)]*>(.*)|is', $html, $matches); if ($result) { // Make sure it's not in a comment $comment_start = strrpos($matches[1], ''); if ($comment_start === false || ($comment_end !== false && $comment_end > $comment_start)) { return $matches[2]; } } return $html; } }__halt_compiler();----SIGNATURE:----eByAkSSmXDOK/K3RF8exH/otC4cMgyYYxuwdthayKiAGAl5W7M9dX4+iD3wxUuURpAQZQ9QzFJa8guziSe3KzF9lCE4Os0gAQpGy/WQW4vh+Oqpz/TsKLAe8/enPtEBtm760vfYE3oeVba3r/rLkY/E+16Ps6MhIRNIr0YDEMsj7YyFWbgx5hSZJZixOZbCJfjnJenNMwyr9CT9WJExuWL5kcUwgygTBD21bqx8O7FCP/5H3UwtUoUlrh7IK+KCTVXXNJKXicAxuxwVcWU+aFYDSwSCqpH7+wpRHMvI5rudN2F7N95lOh+oyRosAsyPVAatoWjrXYjyzMQ+gYQj2J4VTJkL/9KBmIDm6hhehaQAtsG//RVxntmQOcHWRNlPYE0CkRucp0z5HXjQDI49PRp/38pzzxjT+ps0eNYmCRLd0zEn4lgRO6/7L7IVph9//igykGcgIZdydM2htRKhIQIFHgm7gPNGNIUhehdWVTCh6i0Gp8uhhyUHFICFwo9O4+BT9VR7EofsNF834YvIyz0cXnlUx/4G+VSY9fThNqKxqYygKiI27WZZvUDBrvFqfFsq6nehYf0ermkMO/HYjkJ+35QpA3Ad+x9OJFrU+tsCDMy70EuIL5sBODDeVNJlYWBEtb23p7H5gyPCq4YBVXWQzn4aUxzwbhjiO65SqxY8=----ATTACHMENT:----MTY1OTUyNzIwMjEyNDY1NiAxMDE2NjQzOTI0NDI0ODA4IDk1NDI4NTg1OTA4NzMyNzg=