
$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