parser = new HTMLPurifier_URIParser (); $this->embedsResource = ( bool ) $embeds_resource; } /** * * @param string $string * @return HTMLPurifier_AttrDef_URI */ public function make($string) { $embeds = ($string === 'embedded'); return new HTMLPurifier_AttrDef_URI ( $embeds ); } /** * * @param string $uri * @param HTMLPurifier_Config $config * @param HTMLPurifier_Context $context * @return bool|string */ public function validate($uri, $config, $context) { if ($config->get ( 'URI.Disable' )) { return false; } $uri = $this->parseCDATA ( $uri ); // parse the URI $uri = $this->parser->parse ( $uri ); if ($uri === false) { return false; } // add embedded flag to context for validators $context->register ( 'EmbeddedURI', $this->embedsResource ); $ok = false; do { // generic validation $result = $uri->validate ( $config, $context ); if (! $result) { break; } // chained filtering $uri_def = $config->getDefinition ( 'URI' ); $result = $uri_def->filter ( $uri, $config, $context ); if (! $result) { break; } // scheme-specific validation $scheme_obj = $uri->getSchemeObj ( $config, $context ); if (! $scheme_obj) { break; } if ($this->embedsResource && ! $scheme_obj->browsable) { break; } $result = $scheme_obj->validate ( $uri, $config, $context ); if (! $result) { break; } // Post chained filtering $result = $uri_def->postFilter ( $uri, $config, $context ); if (! $result) { break; } // survived gauntlet $ok = true; } while ( false ); $context->destroy ( 'EmbeddedURI' ); if (! $ok) { return false; } // back to string return $uri->toString (); } } // vim: et sw=4 sts=4