AutorÃa | Ultima modificación | Ver Log |
<?php/*** Validator for the components of a URI for a specific scheme*/abstract class HTMLPurifier_URIScheme{/*** Scheme's default port (integer). If an explicit port number is* specified that coincides with the default port, it will be* elided.* @type int*/public $default_port = null;/*** Whether or not URIs of this scheme are locatable by a browser* http and ftp are accessible, while mailto and news are not.* @type bool*/public $browsable = false;/*** Whether or not data transmitted over this scheme is encrypted.* https is secure, http is not.* @type bool*/public $secure = false;/*** Whether or not the URI always uses <hier_part>, resolves edge cases* with making relative URIs absolute* @type bool*/public $hierarchical = false;/*** Whether or not the URI may omit a hostname when the scheme is* explicitly specified, ala file:///path/to/file. As of writing,* 'file' is the only scheme that browsers support his properly.* @type bool*/public $may_omit_host = false;/*** Validates the components of a URI for a specific scheme.* @param HTMLPurifier_URI $uri Reference to a HTMLPurifier_URI object* @param HTMLPurifier_Config $config* @param HTMLPurifier_Context $context* @return bool success or failure*/abstract public function doValidate(&$uri, $config, $context);/*** Public interface for validating components of a URI. Performs a* bunch of default actions. Don't overload this method.* @param HTMLPurifier_URI $uri Reference to a HTMLPurifier_URI object* @param HTMLPurifier_Config $config* @param HTMLPurifier_Context $context* @return bool success or failure*/public function validate(&$uri, $config, $context){if ($this->default_port == $uri->port) {$uri->port = null;}// kludge: browsers do funny things when the scheme but not the// authority is setif (!$this->may_omit_host &&// if the scheme is present, a missing host is always in error(!is_null($uri->scheme) && ($uri->host === '' || is_null($uri->host))) ||// if the scheme is not present, a *blank* host is in error,// since this translates into '///path' which most browsers// interpret as being 'http://path'.(is_null($uri->scheme) && $uri->host === '')) {do {if (is_null($uri->scheme)) {if (substr($uri->path, 0, 2) != '//') {$uri->host = null;break;}// URI is '////path', so we cannot nullify the// host to preserve semantics. Try expanding the// hostname instead (fall through)}// first see if we can manually insert a hostname$host = $config->get('URI.Host');if (!is_null($host)) {$uri->host = $host;} else {// we can't do anything sensible, reject the URL.return false;}} while (false);}return $this->doValidate($uri, $config, $context);}}// vim: et sw=4 sts=4