рдХреЗрд╡рд▓ рдХреБрдЫ рдкреИрд░рд╛рдЧреНрд░рд╛рдлреЛрдВ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ Yii рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛, рдмрд╛рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ рдФрд░ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредрдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реЛрдзрдХ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредHTML рд╢реЛрдзрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛
рдпрджрд┐ рдЖрдкрдиреЗ
HTML рдкреНрдпреВрд░рд┐рдлрд╛рдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реБрдВрджрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдФрд░ рд╣реИрдмреЗрд░реА рдкрд░ рдПрдХ рдЦреЛрдЬ рдЗрддрдиреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреА рдмрд╛рдд рдирд╣реАрдВ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ HTML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдПрдХ рдордзреНрдпрд╕реНрде рдпрд╛ рдПрдХ рдкреНрд░рд╢рд╛рд╕рдХ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕рд╣рд┐рдд рдХреЛрдб рдХреЗ рд╕рднреА рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг, рдЕрдорд╛рдиреНрдп, рдирд┐рд╖рд┐рджреНрдз (рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛) рднрд╛рдЧреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА HTML рдХреЛрдб рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реИред
рдХрдо рд╢рдмреНрдж, рдЕрдзрд┐рдХ рдХреЛрдбред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓реЗрдВрдЧреЗред
$config = HTMLPurifier_Config::createDefault(); $config->set('Attr.AllowedClasses',array('header'));
* - RemoveEmpty рдЕрдкрд╡рд╛рджрд╕реНрд░реЛрдд 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>
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ рдФрд░ рдЙрди рдмрдиреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдЪрд╛рд╣рд┐рдПред
"рдкрд░реНрд▓ рдмрдЯрдиреНрд╕ рдХреА рдорд╛рдБ"
рд▓реЗрдХрд┐рди рдпрд╣ рдкрдж рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрджрд┐ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рджреЛ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдереЗ:
- рдмрд╛рд╣рд░реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рднреА рд▓рд┐рдВрдХ рдХреЛ рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ site.ru/redirect?url=link
- рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ рдкрд░ рд▓рдХреНрд╖реНрдп = _blank рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВ
рдХрд╛рд░реНрдп рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд▓рдЧрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреЙрдХ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛
рд▓реЗрдЦ рд╣реИ , рдФрд░ рджреВрд╕рд░рд╛ рдЖрдо рддреМрд░ рдкрд░ рдЯреНрд░рд┐рдлрд╝реНрд▓рд┐рдВрдЧ рд╣реИ - рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред рд▓рдХреНрд╖реНрдпрдмреИрдВрдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХрд╛рд░реНрдп 1 - рдмрд╛рд╣рд░реА рд▓рд┐рдВрдХ рдХреА рдЬрдЧрд╣
рд╢реЛрдзрдХ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрджреНрднреБрдд рд╢реНрд░реЗрдгреА рдХрд╛ HTMLPurifier_URIFilter рд╣реИ рдФрд░ рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдо рдЕрджреНрднреБрдд
рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ
рдореИрдВрдиреЗ DisableExternalResources рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдФрд░ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рддреБрд░рдВрдд рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛, рдЕрд░реНрдерд╛рддреН рдмрд╛рд╣рд░реА рд▓рд┐рдВрдХ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ред
рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝рд╛рдЗрд▓рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг:
рддреИрдпрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХреЗ рдореЗрдЬрдмрд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдВрдХреЛрдВ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рд░рдгреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдирддреАрдЬрддрди, рдпрд╣ рд╕рд░рдгреА ('рдЖрд░рдпреВ', 'рд╕рд╛рдЗрдЯ', 'рд╕рдмрдбреЛрдореЗрди') рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣реЛрд╕реНрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдпрд╣ рд╕рдорд╛рди рд╣реИ, рддреЛ рдХреБрдЫ рднреА рди рдмрджрд▓реЗрдВ рдФрд░ рд╕рд╣реА рд▓реМрдЯреЗрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдпреВрдЖрд░рдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ рдХреЛ рдЬреАрдИрдЯреА рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдбрд╛рд▓реЗрдВред
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рд┐рдВрдХ рдХреЛ рд░рд┐рдЯрд░реНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓рдХрд░ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВред
<?php class HTMLPurifier_URIFilter_MakeRedirect extends HTMLPurifier_URIFilter { public $name = 'MakeRedirect'; protected $ourHostParts = false; public function prepare($config) { $our_host = $config->getDefinition('URI')->host; if ($our_host !== null) { $this->ourHostParts = array_reverse(explode('.', $our_host)); } } 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');
рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рд╣рдореЗрдВ HTMLPurifier_Config рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
$config = HTMLPurifier_Config::createDefault(); $uri = $config->getDefinition('URI'); $uri->addFilter(new HTMLPurifier_URIFilter_MakeRedirect(), $config); $purifier = new HTMLPurifier($config); $clean_html = $purifier->purify($html);
рдЦреБрд╢ Yii рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдЪреНрдЫреЗрдж
рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реВрдВ (
рдФрд░ рдореБрдЭреЗ рдХреЛрдИ рдкрдЫрддрд╛рд╡рд╛ рдирд╣реАрдВ рд╣реИ )ред
рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ Yii рд╢реЛрдзрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЪрд┐рдХрдирд╛ рдирд╣реАрдВ рд╣реИред
рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЙрджрд╛рд╣рд░рдг: $p = new CHtmlPurifier();
рд╡рд╣рд╛рдБ рд╕реЗ рд╣рдо рд╕реАрдЦрддреЗ рд╣реИрдВ:
private $_options=null;
рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдПрдХ рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп рдПрдХ HTMLPurifier_Config рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
$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
рдпрд╣рд╛рдБ рд╣рдо рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЧреЙрдЧрд▓ CHtmlPurifier
рдорди рдореЗрдВ рдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ Cache.SerializerPath рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ Yii :: app () -> getRitimePath () рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд╕реЗ рдХреИрд╢ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреАред
рд╣рдо рдХрд░рддреЗ рд╣реИрдВ:
$purifier = new CHtmlPurifier(); $config = HTMLPurifier_Config::createDefault(); $config->set('AutoFormat.RemoveEmpty', true); $config->set('Cache.SerializerPath',Yii::app()->getRuntimePath());
Cannot set directive after finalization invoked on line 127 in file /framework/web/widgets/CHtmlPurifier.php
рдЕрдм рдкрд░реНрд╕рд░ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рджреЛ рдмрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдФрд░ CHtmlPurifier рдЗрд╕реЗ createNewHtmlPurifierInstance () рдореЗрдердб рдореЗрдВ рдХрд░рддрд╛ рд╣реИ
protected function createNewHtmlPurifierInstance() { $this->_purifier=new HTMLPurifier($this->getOptions()); $this->_purifier->config->set('Cache.SerializerPath',Yii::app()->getRuntimePath()); return $this->_purifier; }
рдпрд╣рд╛рдВ, рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕ред рдореБрдЭреЗ GHtmlPurifier class рдмрдирд╛рдиреЗ рдФрд░ CHNmlPurifier рд╡рд░реНрдЧ рдХреА рдУрд░ рд╕реЗ рдЗрд╕реЗ createNewHtmlPurifierInstance () рд╡рд┐рдзрд┐ рд╕реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рдореИрдВрдиреЗ рдирдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ
рд╕рдВрд░рдХреНрд╖рд┐рдд / рдШрдЯрдХреЛрдВ / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдФрд░ рдХреЛрдб рдиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдХрд╛рдо рдХрд┐рдпрд╛ред
$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);
рдХрд╛рд░реНрдп 2 - рд▓рдХреНрд╖реНрдп рдЬреЛрдбрд╝рдирд╛ = _blank
рдореИрдВ рдЖрдкрдХреЛ рдЧреИрд░-рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдореИрдВ рддреБрд░рдВрдд
рдХрд╣реВрдВрдЧрд╛ рдХрд┐
HTML.TargetBlank рдХреЗрд╡рд▓ рдмрд╛рд╣рд░реА рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЖрд╡реЗрджрди рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ URI рдлрд╝рд┐рд▓реНрдЯрд░ рдЯреИрдЧ рдФрд░ рдЙрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдЕрдЪреНрдЫреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЖрджреА, рд╡рд╣ рдореИрдирд╛ рдореЗрдВ рдЪрдврд╝ рдЧрдП, рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕, рдЖрд╡рд╢реНрдпрдХ
рдЙрдиреНрдирдд рдПрдкреАрдЖрдИ рдЕрдиреБрднрд╛рдЧ рдЦрд╛рд▓реА рдерд╛ рдФрд░
"рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рджрд╛рдпрд░" рд╢рд┐рд▓рд╛рд▓реЗрдЦ
рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ ред
рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдиреЗ рдФрд░ HTML.TargetBlank рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рдмрдЪрд╛ рдерд╛ред
рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:
HTMLPurifier_AttrTransform_TargetBlank 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; }
рд╣рдорд╛рд░рд╛ рдЕрдкрдирд╛ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдмрд╛рд╣рд░реА рдкрддреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЬреЛ рднреА рд▓рд┐рдВрдХ рдЖрдкрдХреЛ рдорд┐рд▓реЗрдВрдЧреЗ, рдЙрдирдореЗрдВ рд▓рдХреНрд╖реНрдп = _blank рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдорд┐рдВрдЧ рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ-рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдФрд░ рдбрд┐рд▓реАрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕реВрдЪреА рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ
HTMLPurifier_AttrTransform_TargetBlankAll рдирд╛рдо рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ / рд╕рдВрд░рдХреНрд╖рд┐рдд / рдШрдЯрдХреЛрдВ / рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред
рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛, рдореЙрдбреНрдпреВрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдХреЛрдб рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
HTMLPurifier_HTMLModule_TargetBlankAll.php class HTMLPurifier_HTMLModule_TargetBlankAll extends HTMLPurifier_HTMLModule { public $name = 'TargetBlankAll';
рдореИрдВрдиреЗ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ / рд╕рдВрд░рдХреНрд╖рд┐рдд / рдШрдЯрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рднреА рд░рдЦрд╛ рд╣реИред
рдЕрдм рдпрд╣ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддрд░реНрдХрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ HTML рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ $ рд░реЙ = рдЯреНрд░реВ рдХреЗ рд╕рд╛рде рд╣реЛ, рддрд╛рдХрд┐ рдпрд╣ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛ рдЬрд╛рдП рдФрд░ HTMLPurifier_HTMLDefinition рдХреНрд▓рд╛рд╕ рдореЗрдВ __construct () рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░рддреА рд╣реИред
__Construct () рд╡рд┐рдзрд┐ $ рдЗрд╕-> рдореИрдиреЗрдЬрд░ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
$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);
рддрд╛ рдмрд╛рдВрдз: <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>
рджреЛрдиреЛрдВ рдХрд╛рд░реНрдп рдкреВрд░реЗ рд╣реБрдП!
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЛ рдЗрд╕ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдпрд╛ рдФрд░ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреЛ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ HTML рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ред
рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдлрд╝реНрд▓рд╛рдИ рдкрд░ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред