$config = HTMLPurifier_Config::createDefault(); $config->set('Attr.AllowedClasses',array('header')); // Attr.ForbiddenClasses CSS $config->set('AutoFormat.AutoParagraph',true); // <p> $config->set('AutoFormat.RemoveEmpty',true); // , * $config->set('HTML.Doctype','HTML 4.01 Strict'); // <strike> $purifier = new HTMLPurifier($config); $clean_html = $purifier->purify($html);
<p invalidAttribute="value">, <strike></strike>:</p> <p> - <invalidTag></invalidTag>,</p> <p class="header error"> - ,</p> - ! <script type="text/javascript">alert("hacked by Alexander Blok");</script>
<p>, <span style="text-decoration:line-through;"></span>:</p> <p> - ,</p> <p class="header"> - ,</p> <p> - !</p>
<?php class HTMLPurifier_URIFilter_MakeRedirect extends HTMLPurifier_URIFilter { /** * @type string */ public $name = 'MakeRedirect'; /** * @type array */ protected $ourHostParts = false; /** * @param HTMLPurifier_Config $config * @return void */ public function prepare($config) { $our_host = $config->getDefinition('URI')->host; if ($our_host !== null) { $this->ourHostParts = array_reverse(explode('.', $our_host)); } } /** * @param HTMLPurifier_URI $uri Reference * @param HTMLPurifier_Config $config * @param HTMLPurifier_Context $context * @return bool */ public function filter(&$uri, $config, $context) { if (is_null($uri->host)) { return true; } if ($this->ourHostParts === false) { return false; } $host_parts = array_reverse(explode('.', $uri->host)); foreach ($this->ourHostParts as $i => $x) { if (!isset($host_parts[$i]) || $host_parts[$i] != $this->ourHostParts[$i]) { $path = Yii::app()->createUrl('site/redirect'); // Yii, url manager /action, $query = 'url='.urlencode($uri->toString()); $uri = new HTMLPurifier_URI('http', null, Yii::app()->request->getServerName(), // return $_SERVER['SERVER_NAME'] null, $path, $query, null); break; } } return true; } }
$config = HTMLPurifier_Config::createDefault(); $uri = $config->getDefinition('URI'); $uri->addFilter(new HTMLPurifier_URIFilter_MakeRedirect(), $config); $purifier = new HTMLPurifier($config); $clean_html = $purifier->purify($html);
$p = new CHtmlPurifier(); // Yii $p->options = array('URI.AllowedSchemes'=>array('http' => true, 'https' => true,)); // $text = $p->purify($text);
/** * @var mixed the options to be passed to HTML Purifier instance. * This can be a HTMLPurifier_Config object, an array of directives (Namespace.Directive => Value) * or the filename of an ini file. * @see http://htmlpurifier.org/live/configdoc/plain.html */ private $_options=null;
$purifier = new CHtmlPurifier(); $config = HTMLPurifier_Config::createDefault(); $config->set('AutoFormat.RemoveEmpty', true); $uri = $config->getDefinition('URI'); $uri->addFilter(new HTMLPurifier_URIFilter_MakeRedirect(), $config); $purifier->options = $config; $clean_html = $purifier->purify($html);
Warning Base directory /framework/vendors/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer does not exist, please create or change using %Cache.SerializerPath
$purifier = new CHtmlPurifier(); $config = HTMLPurifier_Config::createDefault(); $config->set('AutoFormat.RemoveEmpty', true); $config->set('Cache.SerializerPath',Yii::app()->getRuntimePath()); // <-- $uri = $config->getDefinition('URI'); $uri->addFilter(new HTMLPurifier_URIFilter_MakeRedirect(), $config); $purifier->options = $config; $clean_html = $purifier->purify($html);
Cannot set directive after finalization invoked on line 127 in file /framework/web/widgets/CHtmlPurifier.php
protected function createNewHtmlPurifierInstance() { $this->_purifier=new HTMLPurifier($this->getOptions()); $this->_purifier->config->set('Cache.SerializerPath',Yii::app()->getRuntimePath()); return $this->_purifier; }
$htmlpurifier = new GHtmlPurifier(); $config = HTMLPurifier_Config::createDefault(); $config->set('Cache.SerializerPath',Yii::app()->getRuntimePath()); $uri = $config->getDefinition('URI'); $uri->addFilter(new HTMLPurifier_URIFilter_MakeRedirect(), $config); $htmlpurifier->options = $config; return $htmlpurifier->purify($text);
/** * Adds target="blank" to all outbound links. This transform is * only attached if Attr.TargetBlank is TRUE. This works regardless * of whether or not Attr.AllowedFrameTargets */ class HTMLPurifier_AttrTransform_TargetBlank extends HTMLPurifier_AttrTransform { private $parser; public function __construct() { $this->parser = new HTMLPurifier_URIParser(); } public function transform($attr, $config, $context) { if (!isset($attr['href'])) { return $attr; } // XXX Kind of inefficient $url = $this->parser->parse($attr['href']); $scheme = $url->getSchemeObj($config, $context); if ($scheme->browsable && !$url->isBenign($config, $context)) { $attr['target'] = '_blank'; } return $attr; } }
class HTMLPurifier_HTMLModule_TargetBlankAll extends HTMLPurifier_HTMLModule { public $name = 'TargetBlankAll'; // . public function setup($config) { $a = $this->addBlankElement('a'); // , A $a->attr_transform_post[] = new HTMLPurifier_AttrTransform_TargetBlankAll(); // // $a->attr_transform_pre[] } }
$htmlpurifier = new GHtmlPurifier(); $config = HTMLPurifier_Config::createDefault(); $config->set('Cache.SerializerPath',Yii::app()->getRuntimePath()); $uri = $config->getDefinition('URI'); $uri->addFilter(new HTMLPurifier_URIFilter_MakeRedirect(), $config); $html = $config->getHTMLDefinition(true); // HTMLPurifier_HTMLDefinition $html->manager->addModule('TargetBlankAll'); // $htmlpurifier->options = $config; return $htmlpurifier->purify($text);
<a href="http://site.ru/">http://site.ru</a> <a href="http://habrahabr.ru/">http://habrahabr.ru</a>
<a href="http://site.ru/" target="_blank">http://site.ru</a> <a href="http://site.ru/redirect/?url=http%3A%2F%2Fhabrahabr.ru%2F" target="_blank">http://habrahabr.ru</a>
Source: https://habr.com/ru/post/202188/
All Articles