📄 config.php
字号:
<?phprequire_once 'HTMLPurifier/ConfigSchema.php';// member variablesrequire_once 'HTMLPurifier/HTMLDefinition.php';require_once 'HTMLPurifier/CSSDefinition.php';require_once 'HTMLPurifier/URIDefinition.php';require_once 'HTMLPurifier/Doctype.php';require_once 'HTMLPurifier/DefinitionCacheFactory.php';// accomodations for versions earlier than 4.3.10 and 5.0.2// borrowed from PHP_Compat, LGPL licensed, by Aidan Lister <aidan@php.net>if (!defined('PHP_EOL')) { switch (strtoupper(substr(PHP_OS, 0, 3))) { case 'WIN': define('PHP_EOL', "\r\n"); break; case 'DAR': define('PHP_EOL', "\r"); break; default: define('PHP_EOL', "\n"); }}/** * Configuration object that triggers customizable behavior. * * @warning This class is strongly defined: that means that the class * will fail if an undefined directive is retrieved or set. * * @note Many classes that could (although many times don't) use the * configuration object make it a mandatory parameter. This is * because a configuration object should always be forwarded, * otherwise, you run the risk of missing a parameter and then * being stumped when a configuration directive doesn't work. */class HTMLPurifier_Config{ /** * HTML Purifier's version */ var $version = '2.1.5'; /** * Two-level associative array of configuration directives */ var $conf; /** * Reference HTMLPurifier_ConfigSchema for value checking */ var $def; /** * Indexed array of definitions */ var $definitions; /** * Bool indicator whether or not config is finalized */ var $finalized = false; /** * Bool indicator whether or not to automatically finalize * the object if a read operation is done */ var $autoFinalize = true; /** * Namespace indexed array of serials for specific namespaces (see * getSerial for more info). */ var $serials = array(); /** * Serial for entire configuration object */ var $serial; /** * @param $definition HTMLPurifier_ConfigSchema that defines what directives * are allowed. */ function HTMLPurifier_Config(&$definition) { $this->conf = $definition->defaults; // set up, copy in defaults $this->def = $definition; // keep a copy around for checking } /** * Convenience constructor that creates a config object based on a mixed var * @static * @param mixed $config Variable that defines the state of the config * object. Can be: a HTMLPurifier_Config() object, * an array of directives based on loadArray(), * or a string filename of an ini file. * @return Configured HTMLPurifier_Config object */ function create($config) { if (is_a($config, 'HTMLPurifier_Config')) { // pass-through return $config; } $ret = HTMLPurifier_Config::createDefault(); if (is_string($config)) $ret->loadIni($config); elseif (is_array($config)) $ret->loadArray($config); return $ret; } /** * Convenience constructor that creates a default configuration object. * @static * @return Default HTMLPurifier_Config object. */ function createDefault() { $definition =& HTMLPurifier_ConfigSchema::instance(); $config = new HTMLPurifier_Config($definition); return $config; } /** * Retreives a value from the configuration. * @param $namespace String namespace * @param $key String key */ function get($namespace, $key, $from_alias = false) { if (!$this->finalized && $this->autoFinalize) $this->finalize(); if (!isset($this->def->info[$namespace][$key])) { // can't add % due to SimpleTest bug trigger_error('Cannot retrieve value of undefined directive ' . htmlspecialchars("$namespace.$key"), E_USER_WARNING); return; } if ($this->def->info[$namespace][$key]->class == 'alias') { $d = $this->def->info[$namespace][$key]; trigger_error('Cannot get value from aliased directive, use real name ' . $d->namespace . '.' . $d->name, E_USER_ERROR); return; } return $this->conf[$namespace][$key]; } /** * Retreives an array of directives to values from a given namespace * @param $namespace String namespace */ function getBatch($namespace) { if (!$this->finalized && $this->autoFinalize) $this->finalize(); if (!isset($this->def->info[$namespace])) { trigger_error('Cannot retrieve undefined namespace ' . htmlspecialchars($namespace), E_USER_WARNING); return; } return $this->conf[$namespace]; } /** * Returns a md5 signature of a segment of the configuration object * that uniquely identifies that particular configuration * @note Revision is handled specially and is removed from the batch * before processing! * @param $namespace Namespace to get serial for */ function getBatchSerial($namespace) { if (empty($this->serials[$namespace])) { $batch = $this->getBatch($namespace); unset($batch['DefinitionRev']); $this->serials[$namespace] = md5(serialize($batch)); } return $this->serials[$namespace]; } /** * Returns a md5 signature for the entire configuration object * that uniquely identifies that particular configuration */ function getSerial() { if (empty($this->serial)) { $this->serial = md5(serialize($this->getAll())); } return $this->serial; } /** * Retrieves all directives, organized by namespace */ function getAll() { if (!$this->finalized && $this->autoFinalize) $this->finalize(); return $this->conf; } /** * Sets a value to configuration. * @param $namespace String namespace * @param $key String key * @param $value Mixed value */ function set($namespace, $key, $value, $from_alias = false) { if ($this->isFinalized('Cannot set directive after finalization')) return; if (!isset($this->def->info[$namespace][$key])) { trigger_error('Cannot set undefined directive ' . htmlspecialchars("$namespace.$key") . ' to value', E_USER_WARNING); return; } if ($this->def->info[$namespace][$key]->class == 'alias') { if ($from_alias) { trigger_error('Double-aliases not allowed, please fix '. 'ConfigSchema bug with' . "$namespace.$key"); } $this->set($this->def->info[$namespace][$key]->namespace, $this->def->info[$namespace][$key]->name, $value, true); return; } $value = $this->def->validate( $value, $type = $this->def->info[$namespace][$key]->type, $this->def->info[$namespace][$key]->allow_null ); if (is_string($value)) { // resolve value alias if defined if (isset($this->def->info[$namespace][$key]->aliases[$value])) { $value = $this->def->info[$namespace][$key]->aliases[$value]; } if ($this->def->info[$namespace][$key]->allowed !== true) { // check to see if the value is allowed if (!isset($this->def->info[$namespace][$key]->allowed[$value])) { trigger_error('Value not supported, valid values are: ' . $this->_listify($this->def->info[$namespace][$key]->allowed), E_USER_WARNING); return; } } } if ($this->def->isError($value)) { trigger_error('Value for ' . "$namespace.$key" . ' is of invalid type, should be ' . $type, E_USER_WARNING); return; } $this->conf[$namespace][$key] = $value; // reset definitions if the directives they depend on changed // this is a very costly process, so it's discouraged // with finalization if ($namespace == 'HTML' || $namespace == 'CSS') { $this->definitions[$namespace] = null; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -