14 if (!defined(
'IN_PEEL'))
19 if (!function_exists(
'htmLawed'))
30 function htmLawed($t, $C=1, $S=array())
32 $C = is_array($C) ? $C : array();
33 if (!empty($C[
'valid_xhtml']))
35 $C[
'elements'] = empty($C[
'elements']) ?
'*-center-dir-font-isindex-menu-s-strike-u' : $C[
'elements'];
36 $C[
'make_tag_strict'] = isset($C[
'make_tag_strict']) ? $C[
'make_tag_strict'] : 2;
37 $C[
'xml:lang'] = isset($C[
'xml:lang']) ? $C[
'xml:lang'] : 2;
41 $e = array(
'a'=>1,
'abbr'=>1,
'acronym'=>1,
'address'=>1,
'applet'=>1,
'area'=>1,
'b'=>1,
'bdo'=>1,
'big'=>1,
'blockquote'=>1,
'br'=>1,
'button'=>1,
'caption'=>1,
'center'=>1,
'cite'=>1,
'code'=>1,
'col'=>1,
'colgroup'=>1,
'dd'=>1,
'del'=>1,
'dfn'=>1,
'dir'=>1,
'div'=>1,
'dl'=>1,
'dt'=>1,
'em'=>1,
'embed'=>1,
'fieldset'=>1,
'font'=>1,
'form'=>1,
'h1'=>1,
'h2'=>1,
'h3'=>1,
'h4'=>1,
'h5'=>1,
'h6'=>1,
'hr'=>1,
'i'=>1,
'iframe'=>1,
'img'=>1,
'input'=>1,
'ins'=>1,
'isindex'=>1,
'kbd'=>1,
'label'=>1,
'legend'=>1,
'li'=>1,
'map'=>1,
'menu'=>1,
'noscript'=>1,
'object'=>1,
'ol'=>1,
'optgroup'=>1,
'option'=>1,
'p'=>1,
'param'=>1,
'pre'=>1,
'q'=>1,
'rb'=>1,
'rbc'=>1,
'rp'=>1,
'rt'=>1,
'rtc'=>1,
'ruby'=>1,
's'=>1,
'samp'=>1,
'script'=>1,
'select'=>1,
'small'=>1,
'span'=>1,
'strike'=>1,
'strong'=>1,
'sub'=>1,
'sup'=>1,
'table'=>1,
'tbody'=>1,
'td'=>1,
'textarea'=>1,
'tfoot'=>1,
'th'=>1,
'thead'=>1,
'tr'=>1,
'tt'=>1,
'u'=>1,
'ul'=>1,
'var'=>1);
43 if (!empty($C[
'safe']))
45 unset($e[
'applet'], $e[
'embed'], $e[
'iframe'], $e[
'object'], $e[
'script']);
47 $x = !empty($C[
'elements']) ? str_replace(array(
"\n",
"\r",
"\t",
' '),
'', $C[
'elements']) :
'*';
53 if (strpos($x,
'*') ===
false)
55 $e = array_flip(explode(
',', $x));
61 preg_match_all(
'`(?:^|-|\+)[^\-+]+?(?=-|\+|$)`', $x, $m, PREG_SET_ORDER);
62 for (
$i=count($m); --
$i>=0; )
70 $e[substr($v, 1)] = 1;
72 if ($v[0] ==
'-' && isset($e[($v = substr($v, 1))]) && !in_array(
'+'. $v, $m))
81 $x = !empty($C[
'deny_attribute']) ? str_replace(array(
"\n",
"\r",
"\t",
' '),
'', $C[
'deny_attribute']) :
'';
82 $x = array_flip((isset($x[0]) && $x[0] ==
'*') ? explode(
'-', $x) : explode(
',', $x. (!empty($C[
'safe']) ?
',on*' :
'')));
87 $x += array(
'onabort' => 1,
'onactivate' => 1,
'onafterprint' => 1,
'onafterupdate' => 1,
'onbeforeactivate' => 1,
'onbeforecopy' => 1,
'onbeforecut' => 1,
'onbeforedeactivate' => 1,
'onbeforeeditfocus' => 1,
'onbeforepaste' => 1,
'onbeforeprint' => 1,
'onbeforeunload' => 1,
'onbeforeupdate' => 1,
'onbounce' => 1,
'oncellchange' => 1,
'oncontextmenu' => 1,
'oncontrolselect' => 1,
'oncopy' => 1,
'oncut' => 1,
'ondataavailable' => 1,
'ondatasetchanged' => 1,
'ondatasetcomplete' => 1,
'ondeactivate' => 1,
'ondrag' => 1,
'ondragdrop' => 1,
'ondragend' => 1,
'ondragenter' => 1,
'ondragleave' => 1,
'ondragover' => 1,
'ondragstart' => 1,
'ondrop' => 1,
'onerror' => 1,
'onerrorupdate' => 1,
'onfilterupdate' => 1,
'onfinish' => 1,
'onfocusin' => 1,
'onfocusout' => 1,
'onhelp' => 1,
'onlayoutcomplete' => 1,
'onload' => 1,
'onlosecapture' => 1,
'onmouseenter' => 1,
'onmouseleave' => 1,
'onmousewheel' => 1,
'onmove' => 1,
'onmoveend' => 1,
'onmovestart' => 1,
'onpaste' => 1,
'onpropertychange' => 1,
'onreadystatechange' => 1,
'onresize' => 1,
'onresizeend' => 1,
'onresizestart' => 1,
'onrowexit' => 1,
'onrowsdelete' => 1,
'onrowsinserted' => 1,
'onscroll' => 1,
'onselectionchange' => 1,
'onselectstart' => 1,
'onstart' => 1,
'onstop' => 1,
'onunload' => 1);
89 $x += array(
'onblur'=>1,
'onchange'=>1,
'onclick'=>1,
'ondblclick'=>1,
'onfocus'=>1,
'onkeydown'=>1,
'onkeypress'=>1,
'onkeyup'=>1,
'onmousedown'=>1,
'onmousemove'=>1,
'onmouseout'=>1,
'onmouseover'=>1,
'onmouseup'=>1,
'onreset'=>1,
'onselect'=>1,
'onsubmit'=>1);
91 $C[
'deny_attribute'] = $x;
93 $x = (isset($C[
'schemes'][2]) && strpos($C[
'schemes'],
':')) ? strtolower($C[
'schemes']) :
'href: aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; *:file, http, https, data';
94 $C[
'schemes'] = array();
95 foreach (explode(
';', str_replace(array(
' ',
"\t",
"\r",
"\n"),
'', $x)) as $v)
98 list($x, $x2) = explode(
':', $v, 2);
101 $C[
'schemes'][$x] = array_flip(explode(
',', $x2));
104 if (!isset($C[
'schemes'][
'*']))
106 $C[
'schemes'][
'*'] = array(
'file'=>1,
'http'=>1,
'https'=>1,);
108 if (!empty($C[
'safe']) && empty($C[
'schemes'][
'style']))
110 $C[
'schemes'][
'style'] = array(
'!'=>1);
112 $C[
'abs_url'] = isset($C[
'abs_url']) ? $C[
'abs_url'] : 0;
113 if (!isset($C[
'base_url']) or !preg_match(
'`^[a-zA-Z\d.+\-]+://[^/]+/(.+?/)?$`', $C[
'base_url']))
115 $C[
'base_url'] = $C[
'abs_url'] = 0;
118 $C[
'and_mark'] = empty($C[
'and_mark']) ? 0 : 1;
119 $C[
'anti_link_spam'] = (isset($C[
'anti_link_spam']) && is_array($C[
'anti_link_spam']) && count($C[
'anti_link_spam']) == 2 && (empty($C[
'anti_link_spam'][0]) or hl_regex($C['anti_link_spam'][0])) && (empty($C['anti_link_spam'][1]) or hl_regex($C['anti_link_spam'][1]))) ? $C['anti_link_spam'] : 0;
120 $C['anti_mail_spam'] = isset($C['anti_mail_spam']) ? $C['anti_mail_spam'] : 0;
121 $C['balance'] = isset($C['balance']) ? (
bool)$C['balance'] : 1;
122 $C['cdata'] = isset($C['cdata']) ? $C['cdata'] : (empty($C['safe']) ? 3 : 0);
123 $C['clean_ms_char'] = empty($C['clean_ms_char']) ? 0 : $C['clean_ms_char'];
124 $C['comment'] = isset($C['comment']) ? $C['comment'] : (empty($C['safe']) ? 3 : 0);
125 $C['css_expression'] = empty($C['css_expression']) ? 0 : 1;
126 $C['direct_list_nest'] = empty($C['direct_list_nest']) ? 0 : 1;
127 $C['hexdec_entity'] = isset($C['hexdec_entity']) ? $C['hexdec_entity'] : 1;
128 $C['hook'] = (!empty($C['hook']) && function_exists($C['hook'])) ? $C['hook'] : 0;
129 $C['hook_tag'] = (!empty($C['hook_tag']) && function_exists($C['hook_tag'])) ? $C['hook_tag'] : 0;
130 $C['keep_bad'] = isset($C['keep_bad']) ? $C['keep_bad'] : 6;
131 $C['lc_std_val'] = isset($C['lc_std_val']) ? (
bool)$C['lc_std_val'] : 1;
132 $C['make_tag_strict'] = isset($C['make_tag_strict']) ? $C['make_tag_strict'] : 1;
133 $C['named_entity'] = isset($C['named_entity']) ? (
bool)$C['named_entity'] : 1;
134 $C['no_deprecated_attr'] = isset($C['no_deprecated_attr']) ? $C['no_deprecated_attr'] : 1;
135 $C['parent'] = isset($C['parent'][0]) ? strtolower($C['parent']) : 'body';
136 $C['show_setting'] = !empty($C['show_setting']) ? $C['show_setting'] : 0;
137 $C['style_pass'] = empty($C['style_pass']) ? 0 : 1;
138 $C['tidy'] = empty($C['tidy']) ? 0 : $C['tidy'];
139 $C['unique_ids'] = isset($C['unique_ids']) ? $C['unique_ids'] : 1;
140 $C['xml:lang'] = isset($C['xml:lang']) ? $C['xml:lang'] : 0;
147 $S = is_array($S) ? $S : hl_spec($S);
154 $t = preg_replace(
'`[\x00-\x08\x0b-\x0c\x0e-\x1f]`',
'', $t);
155 if ($C[
'clean_ms_char'])
157 $x = array(
"\x7f"=>
'',
"\x80"=>
'€',
"\x81"=>
'',
"\x83"=>
'ƒ',
"\x85"=>
'…',
"\x86"=>
'†',
"\x87"=>
'‡',
"\x88"=>
'ˆ',
"\x89"=>
'‰',
"\x8a"=>
'Š',
"\x8b"=>
'‹',
"\x8c"=>
'Œ',
"\x8d"=>
'',
"\x8e"=>
'Ž',
"\x8f"=>
'',
"\x90"=>
'',
"\x95"=>
'•',
"\x96"=>
'–',
"\x97"=>
'—',
"\x98"=>
'˜',
"\x99"=>
'™',
"\x9a"=>
'š',
"\x9b"=>
'›',
"\x9c"=>
'œ',
"\x9d"=>
'',
"\x9e"=>
'ž',
"\x9f"=>
'Ÿ');
158 $x = $x + ($C[
'clean_ms_char'] == 1 ? array(
"\x82"=>
'‚',
"\x84"=>
'„',
"\x91"=>
'‘',
"\x92"=>
'’',
"\x93"=>
'“',
"\x94"=>
'”') : array(
"\x82"=>
'\'',
"\x84"=>
'"',
"\x91"=>
'\'',
"\x92"=>
'\'',
"\x93"=>
'"',
"\x94"=>
'"'));
161 if ($C[
'cdata'] or $C[
'comment'])
163 $t = preg_replace_callback(
'`<!(?:(?:--.*?--)|(?:\[CDATA\[.*?\]\]))>`sm',
'hl_cmtcd', $t);
165 $t = preg_replace_callback(
'`&([A-Za-z][A-Za-z0-9]{1,30}|#(?:[0-9]{1,8}|[Xx][0-9A-Fa-f]{1,7}));`',
'hl_ent', str_replace(
'&',
'&', $t));
166 if ($C[
'unique_ids'] && !isset(
$GLOBALS[
'hl_Ids']))
172 $t = $C[
'hook']($t, $C, $S);
174 if ($C[
'show_setting'] && preg_match(
'`^[a-z][a-z0-9_]*$`i', $C[
'show_setting']))
176 $GLOBALS[$C[
'show_setting']] = array(
'config'=>$C,
'spec'=>$S,
'time'=>microtime());
179 $t = preg_replace_callback(
'`<(?:(?:\s|$)|(?:[^>]*(?:>|$)))|>`m',
'hl_tag', $t);
180 $t = $C[
'balance'] ? hl_bal($t, $C[
'keep_bad'], $C[
'parent']) : $t;
181 $t = (($C[
'cdata'] or $C[
'comment']) && strpos($t,
"\x01") !==
false) ? str_replace(array(
"\x01",
"\x02",
"\x03",
"\x04",
"\x05"), array(
'',
'',
'&',
'<',
'>'), $t) : $t;
182 $t = $C[
'tidy'] ? hl_tidy($t, $C[
'tidy'], $C[
'parent']) : $t;
196 function hl_attrval($t, $p)
201 foreach ($p as $k=>$v)
218 if ((
float)($t) > $v)
224 if ((
float)($t) < $v)
230 if (!preg_match($v, $t))
236 if (preg_match($v, $t))
243 foreach (explode(
'|', $v) as $n)
255 foreach (explode(
'|', $v) as $n)
273 return($o ? $t : (isset($p[
'default']) ? $p[
'default'] : 0));
277 function hl_bal($t, $do=1, $in=
'div')
282 $cB = array(
'blockquote'=>1,
'form'=>1,
'map'=>1,
'noscript'=>1);
285 $cE = array(
'area'=>1,
'br'=>1,
'col'=>1,
'embed'=>1,
'hr'=>1,
'img'=>1,
'input'=>1,
'isindex'=>1,
'param'=>1);
288 $cF = array(
'button'=>1,
'del'=>1,
'div'=>1,
'dd'=>1,
'fieldset'=>1,
'iframe'=>1,
'ins'=>1,
'li'=>1,
'noscript'=>1,
'object'=>1,
'td'=>1,
'th'=>1);
291 $cI = array(
'a'=>1,
'abbr'=>1,
'acronym'=>1,
'address'=>1,
'b'=>1,
'bdo'=>1,
'big'=>1,
'caption'=>1,
'cite'=>1,
'code'=>1,
'dfn'=>1,
'dt'=>1,
'em'=>1,
'font'=>1,
'h1'=>1,
'h2'=>1,
'h3'=>1,
'h4'=>1,
'h5'=>1,
'h6'=>1,
'i'=>1,
'kbd'=>1,
'label'=>1,
'legend'=>1,
'p'=>1,
'pre'=>1,
'q'=>1,
'rb'=>1,
'rt'=>1,
's'=>1,
'samp'=>1,
'small'=>1,
'span'=>1,
'strike'=>1,
'strong'=>1,
'sub'=>1,
'sup'=>1,
'tt'=>1,
'u'=>1,
'var'=>1);
294 $cN = array(
'a'=>array(
'a'=>1),
'button'=>array(
'a'=>1,
'button'=>1,
'fieldset'=>1,
'form'=>1,
'iframe'=>1,
'input'=>1,
'label'=>1,
'select'=>1,
'textarea'=>1),
'fieldset'=>array(
'fieldset'=>1),
'form'=>array(
'form'=>1),
'label'=>array(
'label'=>1),
'noscript'=>array(
'script'=>1),
'pre'=>array(
'big'=>1,
'font'=>1,
'img'=>1,
'object'=>1,
'script'=>1,
'small'=>1,
'sub'=>1,
'sup'=>1),
'rb'=>array(
'ruby'=>1),
'rt'=>array(
'ruby'=>1));
296 $cN2 = array_keys($cN);
297 $cR = array(
'blockquote'=>1,
'dir'=>1,
'dl'=>1,
'form'=>1,
'map'=>1,
'menu'=>1,
'noscript'=>1,
'ol'=>1,
'optgroup'=>1,
'rbc'=>1,
'rtc'=>1,
'ruby'=>1,
'select'=>1,
'table'=>1,
'tbody'=>1,
'tfoot'=>1,
'thead'=>1,
'tr'=>1,
'ul'=>1);
299 $cS = array(
'colgroup'=>array(
'col'=>1),
'dir'=>array(
'li'=>1),
'dl'=>array(
'dd'=>1,
'dt'=>1),
'menu'=>array(
'li'=>1),
'ol'=>array(
'li'=>1),
'optgroup'=>array(
'option'=>1),
'option'=>array(
'#pcdata'=>1),
'rbc'=>array(
'rb'=>1),
'rp'=>array(
'#pcdata'=>1),
'rtc'=>array(
'rt'=>1),
'ruby'=>array(
'rb'=>1,
'rbc'=>1,
'rp'=>1,
'rt'=>1,
'rtc'=>1),
'select'=>array(
'optgroup'=>1,
'option'=>1),
'script'=>array(
'#pcdata'=>1),
'table'=>array(
'caption'=>1,
'col'=>1,
'colgroup'=>1,
'tfoot'=>1,
'tbody'=>1,
'tr'=>1,
'thead'=>1),
'tbody'=>array(
'tr'=>1),
'tfoot'=>array(
'tr'=>1),
'textarea'=>array(
'#pcdata'=>1),
'thead'=>array(
'tr'=>1),
'tr'=>array(
'td'=>1,
'th'=>1),
'ul'=>array(
'li'=>1));
301 if (
$GLOBALS[
'C'][
'direct_list_nest'])
303 $cS[
'ol'] = $cS[
'ul'] += array(
'ol'=>1,
'ul'=>1);
306 $cO = array(
'address'=>array(
'p'=>1),
'applet'=>array(
'param'=>1),
'blockquote'=>array(
'script'=>1),
'fieldset'=>array(
'legend'=>1,
'#pcdata'=>1),
'form'=>array(
'script'=>1),
'map'=>array(
'area'=>1),
'object'=>array(
'param'=>1,
'embed'=>1));
309 $cT = array(
'colgroup'=>1,
'dd'=>1,
'dt'=>1,
'li'=>1,
'option'=>1,
'p'=>1,
'td'=>1,
'tfoot'=>1,
'th'=>1,
'thead'=>1,
'tr'=>1);
312 $eB = array(
'address'=>1,
'blockquote'=>1,
'center'=>1,
'del'=>1,
'dir'=>1,
'dl'=>1,
'div'=>1,
'fieldset'=>1,
'form'=>1,
'ins'=>1,
'h1'=>1,
'h2'=>1,
'h3'=>1,
'h4'=>1,
'h5'=>1,
'h6'=>1,
'hr'=>1,
'isindex'=>1,
'menu'=>1,
'noscript'=>1,
'ol'=>1,
'p'=>1,
'pre'=>1,
'table'=>1,
'ul'=>1);
313 $eI = array(
'#pcdata'=>1,
'a'=>1,
'abbr'=>1,
'acronym'=>1,
'applet'=>1,
'b'=>1,
'bdo'=>1,
'big'=>1,
'br'=>1,
'button'=>1,
'cite'=>1,
'code'=>1,
'del'=>1,
'dfn'=>1,
'em'=>1,
'embed'=>1,
'font'=>1,
'i'=>1,
'iframe'=>1,
'img'=>1,
'input'=>1,
'ins'=>1,
'kbd'=>1,
'label'=>1,
'map'=>1,
'object'=>1,
'q'=>1,
'ruby'=>1,
's'=>1,
'samp'=>1,
'select'=>1,
'script'=>1,
'small'=>1,
'span'=>1,
'strike'=>1,
'strong'=>1,
'sub'=>1,
'sup'=>1,
'textarea'=>1,
'tt'=>1,
'u'=>1,
'var'=>1);
321 $eN = array(
'a'=>1,
'big'=>1,
'button'=>1,
'fieldset'=>1,
'font'=>1,
'form'=>1,
'iframe'=>1,
'img'=>1,
'input'=>1,
'label'=>1,
'object'=>1,
'ruby'=>1,
'script'=>1,
'select'=>1,
'small'=>1,
'sub'=>1,
'sup'=>1,
'textarea'=>1);
324 $eO = array(
'area'=>1,
'caption'=>1,
'col'=>1,
'colgroup'=>1,
'dd'=>1,
'dt'=>1,
'legend'=>1,
'li'=>1,
'optgroup'=>1,
'option'=>1,
'param'=>1,
'rb'=>1,
'rbc'=>1,
'rp'=>1,
'rt'=>1,
'rtc'=>1,
'script'=>1,
'tbody'=>1,
'td'=>1,
'tfoot'=>1,
'thead'=>1,
'th'=>1,
'tr'=>1);
329 $in = ((isset($eF[$in]) && $in !=
'#pcdata') or isset($eO[$in])) ? $in :
'div';
332 return(!$do ?
'' : str_replace(array(
'<',
'>'), array(
'<',
'>'), $t));
349 unset($cI[
'del'], $cI[
'ins']);
355 unset($cI[
'del'], $cI[
'ins']);
359 $inOk = $inOk + $cO[$in];
363 $inOk = array_diff_assoc($inOk, $cN[$in]);
366 $t = explode(
'<', $t);
372 for (
$i=-1, $ci=count($t); ++
$i<$ci; )
394 unset($cI[
'del'], $cI[
'ins']);
400 unset($cI[
'del'], $cI[
'ins']);
408 $ok = array_diff_assoc($ok, $cN[$p]);
414 unset($cI[
'del'], $cI[
'ins']);
417 if (isset($e) && ($do == 1 or(isset($ok[
'#pcdata']) && ($do == 3 or $do == 5))))
419 echo
'<', $s, $e, $a,
'>';
423 if (strlen(trim($x)) && (($ql && isset($cB[$p])) or(isset($cB[$in]) && !$ql)))
425 echo
'<div>', $x,
'</div>';
428 if ($do < 3 or isset($ok[
'#pcdata']))
433 if (strpos($x,
"\x02\x04"))
435 foreach (preg_split(
'`(\x01\x02[^\x01\x02]+\x02\x01)`', $x, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $v)
437 echo(substr($v, 0, 2) ==
"\x01\x02" ? $v : ($do > 4 ? preg_replace(
'`\S`',
'', $v) :
''));
443 echo preg_replace(
'`\S`',
'', $x);
447 if (!preg_match(
'`^(/?)([a-z1-6]+)([^>]*)>(.*)`sm', $t[
$i], $r))
456 list($all, $s, $e, $a, $x) = $r;
461 if (isset($cE[$e]) or !in_array($e,
$q))
478 for ($j=-1, $cj=count(
$q); ++$j<$cj; )
480 if (($d = array_pop(
$q)) == $e)
489 echo $add,
'</', $e,
'>';
495 if (isset($cB[$e]) && strlen(trim($x)))
497 $t[
$i] =
"{$e}{$a}>";
498 array_splice($t, $i+1, 0,
'div>'. $x);
504 if ((($ql && isset($cB[$p])) or(isset($cB[$in]) && !$ql)) && !isset($eB[$e]) && !isset($ok[$e]))
506 array_splice($t, $i, 0,
'div>');
513 if (!$ql or !isset($eN[$e]) or !array_intersect(
$q, $cN2))
517 if ($ql && isset($cT[$p]))
519 echo
'</', array_pop(
$q),
'>';
529 echo
'<', $e, $a,
'>';
534 if (isset($cS[$p][$e]))
540 echo
'<', $e, $a,
'>';
547 for ($k=-1, $kc=count(
$q); ++$k<$kc; )
556 $ok2 = isset($cI[$d]) ? $eI : $eF;
559 $ok2 = $ok2 + $cO[$d];
563 $ok2 = array_diff_assoc($ok2, $cN[$d]);
565 if (!isset($ok2[$e]))
567 if (!$k && !isset($inOk[$e]))
576 $add =
"</{$q[$k]}>{$add}";
590 echo $add,
'<', $e, $a,
'>';
615 unset($cI[
'del'], $cI[
'ins']);
621 unset($cI[
'del'], $cI[
'ins']);
629 $ok = array_diff_assoc($ok, $cN[$p]);
635 unset($cI[
'del'], $cI[
'ins']);
637 if (isset($e) && ($do == 1 or(isset($ok[
'#pcdata']) && ($do == 3 or $do == 5))))
639 echo
'<', $s, $e, $a,
'>';
643 if (strlen(trim($x)) && (($ql && isset($cB[$p])) or(isset($cB[$in]) && !$ql)))
645 echo
'<div>', $x,
'</div>';
648 if ($do < 3 or isset($ok[
'#pcdata']))
653 if (strpos($x,
"\x02\x04"))
655 foreach (preg_split(
'`(\x01\x02[^\x01\x02]+\x02\x01)`', $x, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $v)
657 echo(substr($v, 0, 2) ==
"\x01\x02" ? $v : ($do > 4 ? preg_replace(
'`\S`',
'', $v) :
''));
663 echo preg_replace(
'`\S`',
'', $x);
666 while (!empty(
$q) && ($e = array_pop(
$q)))
670 $o = ob_get_contents();
676 function hl_cmtcd($t)
681 if (!($v = $C[$n = $t[3] ==
'-' ?
'comment' :
'cdata']))
691 if (substr(($t = preg_replace(
'`--+`',
'-', substr($t, 4, -3))), -1) !=
' ')
698 $t = substr($t, 1, -1);
700 $t = $v == 2 ? str_replace(array(
'&',
'<',
'>'), array(
'&',
'<',
'>'), $t) : $t;
701 return str_replace(array(
'&',
'<',
'>'), array(
"\x03",
"\x04",
"\x05"), ($n ==
'comment' ?
"\x01\x02\x04!--$t--\x05\x02\x01" :
"\x01\x01\x04$t\x05\x01\x01"));
710 static $U = array(
'quot'=>1,
'amp'=>1,
'lt'=>1,
'gt'=>1);
711 static $N = array(
'fnof'=>
'402',
'Alpha'=>
'913',
'Beta'=>
'914',
'Gamma'=>
'915',
'Delta'=>
'916',
'Epsilon'=>
'917',
'Zeta'=>
'918',
'Eta'=>
'919',
'Theta'=>
'920',
'Iota'=>
'921',
'Kappa'=>
'922',
'Lambda'=>
'923',
'Mu'=>
'924',
'Nu'=>
'925',
'Xi'=>
'926',
'Omicron'=>
'927',
'Pi'=>
'928',
'Rho'=>
'929',
'Sigma'=>
'931',
'Tau'=>
'932',
'Upsilon'=>
'933',
'Phi'=>
'934',
'Chi'=>
'935',
'Psi'=>
'936',
'Omega'=>
'937',
'alpha'=>
'945',
'beta'=>
'946',
'gamma'=>
'947',
'delta'=>
'948',
'epsilon'=>
'949',
'zeta'=>
'950',
'eta'=>
'951',
'theta'=>
'952',
'iota'=>
'953',
'kappa'=>
'954',
'lambda'=>
'955',
'mu'=>
'956',
'nu'=>
'957',
'xi'=>
'958',
'omicron'=>
'959',
'pi'=>
'960',
'rho'=>
'961',
'sigmaf'=>
'962',
'sigma'=>
'963',
'tau'=>
'964',
'upsilon'=>
'965',
'phi'=>
'966',
'chi'=>
'967',
'psi'=>
'968',
'omega'=>
'969',
'thetasym'=>
'977',
'upsih'=>
'978',
'piv'=>
'982',
'bull'=>
'8226',
'hellip'=>
'8230',
'prime'=>
'8242',
'Prime'=>
'8243',
'oline'=>
'8254',
'frasl'=>
'8260',
'weierp'=>
'8472',
'image'=>
'8465',
'real'=>
'8476',
'trade'=>
'8482',
'alefsym'=>
'8501',
'larr'=>
'8592',
'uarr'=>
'8593',
'rarr'=>
'8594',
'darr'=>
'8595',
'harr'=>
'8596',
'crarr'=>
'8629',
'lArr'=>
'8656',
'uArr'=>
'8657',
'rArr'=>
'8658',
'dArr'=>
'8659',
'hArr'=>
'8660',
'forall'=>
'8704',
'part'=>
'8706',
'exist'=>
'8707',
'empty'=>
'8709',
'nabla'=>
'8711',
'isin'=>
'8712',
'notin'=>
'8713',
'ni'=>
'8715',
'prod'=>
'8719',
'sum'=>
'8721',
'minus'=>
'8722',
'lowast'=>
'8727',
'radic'=>
'8730',
'prop'=>
'8733',
'infin'=>
'8734',
'ang'=>
'8736',
'and'=>
'8743',
'or'=>
'8744',
'cap'=>
'8745',
'cup'=>
'8746',
'int'=>
'8747',
'there4'=>
'8756',
'sim'=>
'8764',
'cong'=>
'8773',
'asymp'=>
'8776',
'ne'=>
'8800',
'equiv'=>
'8801',
'le'=>
'8804',
'ge'=>
'8805',
'sub'=>
'8834',
'sup'=>
'8835',
'nsub'=>
'8836',
'sube'=>
'8838',
'supe'=>
'8839',
'oplus'=>
'8853',
'otimes'=>
'8855',
'perp'=>
'8869',
'sdot'=>
'8901',
'lceil'=>
'8968',
'rceil'=>
'8969',
'lfloor'=>
'8970',
'rfloor'=>
'8971',
'lang'=>
'9001',
'rang'=>
'9002',
'loz'=>
'9674',
'spades'=>
'9824',
'clubs'=>
'9827',
'hearts'=>
'9829',
'diams'=>
'9830',
'apos'=>
'39',
'OElig'=>
'338',
'oelig'=>
'339',
'Scaron'=>
'352',
'scaron'=>
'353',
'Yuml'=>
'376',
'circ'=>
'710',
'tilde'=>
'732',
'ensp'=>
'8194',
'emsp'=>
'8195',
'thinsp'=>
'8201',
'zwnj'=>
'8204',
'zwj'=>
'8205',
'lrm'=>
'8206',
'rlm'=>
'8207',
'ndash'=>
'8211',
'mdash'=>
'8212',
'lsquo'=>
'8216',
'rsquo'=>
'8217',
'sbquo'=>
'8218',
'ldquo'=>
'8220',
'rdquo'=>
'8221',
'bdquo'=>
'8222',
'dagger'=>
'8224',
'Dagger'=>
'8225',
'permil'=>
'8240',
'lsaquo'=>
'8249',
'rsaquo'=>
'8250',
'euro'=>
'8364',
'nbsp'=>
'160',
'iexcl'=>
'161',
'cent'=>
'162',
'pound'=>
'163',
'curren'=>
'164',
'yen'=>
'165',
'brvbar'=>
'166',
'sect'=>
'167',
'uml'=>
'168',
'copy'=>
'169',
'ordf'=>
'170',
'laquo'=>
'171',
'not'=>
'172',
'shy'=>
'173',
'reg'=>
'174',
'macr'=>
'175',
'deg'=>
'176',
'plusmn'=>
'177',
'sup2'=>
'178',
'sup3'=>
'179',
'acute'=>
'180',
'micro'=>
'181',
'para'=>
'182',
'middot'=>
'183',
'cedil'=>
'184',
'sup1'=>
'185',
'ordm'=>
'186',
'raquo'=>
'187',
'frac14'=>
'188',
'frac12'=>
'189',
'frac34'=>
'190',
'iquest'=>
'191',
'Agrave'=>
'192',
'Aacute'=>
'193',
'Acirc'=>
'194',
'Atilde'=>
'195',
'Auml'=>
'196',
'Aring'=>
'197',
'AElig'=>
'198',
'Ccedil'=>
'199',
'Egrave'=>
'200',
'Eacute'=>
'201',
'Ecirc'=>
'202',
'Euml'=>
'203',
'Igrave'=>
'204',
'Iacute'=>
'205',
'Icirc'=>
'206',
'Iuml'=>
'207',
'ETH'=>
'208',
'Ntilde'=>
'209',
'Ograve'=>
'210',
'Oacute'=>
'211',
'Ocirc'=>
'212',
'Otilde'=>
'213',
'Ouml'=>
'214',
'times'=>
'215',
'Oslash'=>
'216',
'Ugrave'=>
'217',
'Uacute'=>
'218',
'Ucirc'=>
'219',
'Uuml'=>
'220',
'Yacute'=>
'221',
'THORN'=>
'222',
'szlig'=>
'223',
'agrave'=>
'224',
'aacute'=>
'225',
'acirc'=>
'226',
'atilde'=>
'227',
'auml'=>
'228',
'aring'=>
'229',
'aelig'=>
'230',
'ccedil'=>
'231',
'egrave'=>
'232',
'eacute'=>
'233',
'ecirc'=>
'234',
'euml'=>
'235',
'igrave'=>
'236',
'iacute'=>
'237',
'icirc'=>
'238',
'iuml'=>
'239',
'eth'=>
'240',
'ntilde'=>
'241',
'ograve'=>
'242',
'oacute'=>
'243',
'ocirc'=>
'244',
'otilde'=>
'245',
'ouml'=>
'246',
'divide'=>
'247',
'oslash'=>
'248',
'ugrave'=>
'249',
'uacute'=>
'250',
'ucirc'=>
'251',
'uuml'=>
'252',
'yacute'=>
'253',
'thorn'=>
'254',
'yuml'=>
'255');
714 return($C[
'and_mark'] ?
"\x06" :
'&'). (isset($U[$t]) ? $t : (isset($N[$t]) ? (!$C[
'named_entity'] ?
'#'. ($C[
'hexdec_entity'] > 1 ?
'x'. dechex($N[$t]) : $N[$t]) : $t) :
'amp;'. $t)).
';';
716 if (($n = ctype_digit($t = substr($t, 1)) ? intval($t) : hexdec(substr($t, 1))) < 9 or($n > 13 && $n < 32) or $n == 11 or $n == 12 or($n > 126 && $n < 160 && $n != 133 && $n != 153 && $n != 156) or($n > 55295 && ($n < 57344 or($n > 64975 && $n < 64992) or $n == 65534 or $n == 65535 or $n > 1114111)))
718 return($C[
'and_mark'] ?
"\x06" :
'&').
"amp;#{$t};";
720 return($C[
'and_mark'] ?
"\x06" :
'&').
'#'. (((ctype_digit($t) && $C[
'hexdec_entity'] < 2) or !$C[
'hexdec_entity']) ? $n :
'x'. dechex($n)).
';';
724 function hl_prot($p, $c=null)
736 $c = isset($C[
'schemes'][$c]) ? $C[
'schemes'][$c] : $C[
'schemes'][
'*'];
737 static $d =
'denied:';
738 if (isset($c[
'!']) && substr($p, 0, 7) != $d)
743 if (isset($c[
'*']) or !strcspn($p,
'#?;') or(substr($p, 0, 7) == $d))
745 return "{$b}{$p}{$a}";
749 if (preg_match(
'`^([a-z\d\-+.&#; ]+?)(:|&#(58|x3a);|%3a|\\\\0{0,4}3a).`i', $p, $m) && !isset($c[strtolower($m[1])]))
752 return "{$b}{$d}{$p}{$a}";
757 if ($C[
'abs_url'] == -1 && strpos($p, $C[
'base_url']) === 0)
760 $p = substr($p, strlen($C[
'base_url']));
767 if (substr($p, 0, 2) ==
'//')
769 $p = substr($C[
'base_url'], 0, strpos($C[
'base_url'],
':')+1). $p;
774 $p = preg_replace(
'`(^.+?://[^/]+)(.*)`',
'', $C[
'base_url']). $p;
777 if (strcspn($p,
'./'))
779 $p = $C[
'base_url']. $p;
783 preg_match(
'`^([a-zA-Z\d\-+.]+://[^/]+)(.*)`', $C[
'base_url'], $m);
784 $p = preg_replace(
'`(?<=/)\./`',
'', $m[2]. $p);
785 while (preg_match(
'`(?<=/)([^/]{3,}|[^/.]+?|\.[^/.]|[^/.]\.)/\.\./`', $p))
787 $p = preg_replace(
'`(?<=/)([^/]{3,}|[^/.]+?|\.[^/.]|[^/.]\.)/\.\./`',
'', $p);
793 return "{$b}{$p}{$a}";
797 function hl_regex($p)
804 if ($t = ini_get(
'track_errors'))
806 $o = isset($php_errormsg) ? $php_errormsg : null;
810 @ini_set(
'track_errors', 1);
812 unset($php_errormsg);
813 if (($d = ini_get(
'display_errors')))
815 @ini_set(
'display_errors', 0);
820 @ini_set(
'display_errors', 1);
822 $r = isset($php_errormsg) ? 0 : 1;
825 $php_errormsg = isset($o) ? $o : null;
829 @ini_set(
'track_errors', 0);
839 $t = str_replace(array(
"\t",
"\r",
"\n",
' '),
'', preg_replace(
'/"(?>(`.|[^"])*)"/sme',
'substr(str_replace(array(";", "|", "~", " ", ",", "/", "(", ")", \'`"\'), array("\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\""), "$0"), 1, -1)', trim($t)));
840 for ($i = count(($t = explode(
';', $t))); --$i>=0; )
843 if (empty($w) or($e = strpos($w,
'=')) ===
false or !strlen(($a = substr($w, $e+1))))
848 foreach (explode(
',', $a) as $v)
850 if (!preg_match(
'`^([a-z:\-\*]+)(?:\((.*?)\))?`i', $v, $m))
854 if (($x = strtolower($m[1])) ==
'-*')
861 $n[substr($x, 1)] = 1;
869 foreach (explode(
'/', $m[2]) as $m)
871 if (empty($m) or($p = strpos($m,
'=')) == 0 or $p < 5)
876 $y[$x][strtolower(substr($m, 0, $p))] = str_replace(array(
"\x01",
"\x02",
"\x03",
"\x04",
"\x05",
"\x06",
"\x07",
"\x08"), array(
";",
"|",
"~",
" ",
",",
"/",
"(",
")"), substr($m, $p+1));
878 if (isset($y[$x][
'match']) && !hl_regex($y[$x][
'match']))
880 unset($y[$x][
'match']);
882 if (isset($y[$x][
'nomatch']) && !hl_regex($y[$x][
'nomatch']))
884 unset($y[$x][
'nomatch']);
887 if (!count($y) && !count($n))
891 foreach (explode(
',', substr($w, 0, $e)) as $v)
893 if (!strlen(($v = strtolower($v))))
925 if (!preg_match(
'`^<(/?)([a-zA-Z][a-zA-Z1-6]*)([^>]*?)\s?>$`m', $t, $m))
927 if(strstr($t,
'data:image')){
930 return str_replace(array(
'<',
'>'), array(
'<',
'>'), $t);
934 if (!isset($C[
'elements'][($e = strtolower($m[2]))]))
936 return(($C[
'keep_bad']%2) ? str_replace(array(
'<',
'>'), array(
'<',
'>'), $t) :
'');
939 $a = str_replace(array(
"\n",
"\r",
"\t"),
' ', trim($m[3]));
942 static $eD = array(
'applet'=>1,
'center'=>1,
'dir'=>1,
'embed'=>1,
'font'=>1,
'isindex'=>1,
'menu'=>1,
's'=>1,
'strike'=>1,
'u'=>1);
944 if ($C[
'make_tag_strict'] && isset($eD[$e]))
946 $trt = hl_tag2($e, $a, $C[
'make_tag_strict']);
949 return(($C[
'keep_bad']%2) ? str_replace(array(
'<',
'>'), array(
'<',
'>'), $t) :
'');
954 static $eE = array(
'area'=>1,
'br'=>1,
'col'=>1,
'embed'=>1,
'hr'=>1,
'img'=>1,
'input'=>1,
'isindex'=>1,
'param'=>1);
958 return(!isset($eE[$e]) ? (empty($C[
'hook_tag']) ?
"</$e>" : $C[
'hook_tag']($e)) : (($C[
'keep_bad'])%2 ? str_replace(array(
'<',
'>'), array(
'<',
'>'), $t) :
''));
963 static $aN = array(
'abbr'=>array(
'td'=>1,
'th'=>1),
'accept-charset'=>array(
'form'=>1),
'accept'=>array(
'form'=>1,
'input'=>1),
'accesskey'=>array(
'a'=>1,
'area'=>1,
'button'=>1,
'input'=>1,
'label'=>1,
'legend'=>1,
'textarea'=>1),
'action'=>array(
'form'=>1),
'align'=>array(
'caption'=>1,
'embed'=>1,
'applet'=>1,
'iframe'=>1,
'img'=>1,
'input'=>1,
'object'=>1,
'legend'=>1,
'table'=>1,
'hr'=>1,
'div'=>1,
'h1'=>1,
'h2'=>1,
'h3'=>1,
'h4'=>1,
'h5'=>1,
'h6'=>1,
'p'=>1,
'col'=>1,
'colgroup'=>1,
'tbody'=>1,
'td'=>1,
'tfoot'=>1,
'th'=>1,
'thead'=>1,
'tr'=>1),
'alt'=>array(
'applet'=>1,
'area'=>1,
'img'=>1,
'input'=>1),
'archive'=>array(
'applet'=>1,
'object'=>1),
'axis'=>array(
'td'=>1,
'th'=>1),
'bgcolor'=>array(
'embed'=>1,
'table'=>1,
'tr'=>1,
'td'=>1,
'th'=>1),
'border'=>array(
'table'=>1,
'img'=>1,
'object'=>1),
'bordercolor'=>array(
'table'=>1,
'td'=>1,
'tr'=>1),
'cellpadding'=>array(
'table'=>1),
'cellspacing'=>array(
'table'=>1),
'char'=>array(
'col'=>1,
'colgroup'=>1,
'tbody'=>1,
'td'=>1,
'tfoot'=>1,
'th'=>1,
'thead'=>1,
'tr'=>1),
'charoff'=>array(
'col'=>1,
'colgroup'=>1,
'tbody'=>1,
'td'=>1,
'tfoot'=>1,
'th'=>1,
'thead'=>1,
'tr'=>1),
'charset'=>array(
'a'=>1,
'script'=>1),
'checked'=>array(
'input'=>1),
'cite'=>array(
'blockquote'=>1,
'q'=>1,
'del'=>1,
'ins'=>1),
'classid'=>array(
'object'=>1),
'clear'=>array(
'br'=>1),
'code'=>array(
'applet'=>1),
'codebase'=>array(
'object'=>1,
'applet'=>1),
'codetype'=>array(
'object'=>1),
'color'=>array(
'font'=>1),
'cols'=>array(
'textarea'=>1),
'colspan'=>array(
'td'=>1,
'th'=>1),
'compact'=>array(
'dir'=>1,
'dl'=>1,
'menu'=>1,
'ol'=>1,
'ul'=>1),
'coords'=>array(
'area'=>1,
'a'=>1),
'data'=>array(
'object'=>1),
'datetime'=>array(
'del'=>1,
'ins'=>1),
'declare'=>array(
'object'=>1),
'defer'=>array(
'script'=>1),
'dir'=>array(
'bdo'=>1),
'disabled'=>array(
'button'=>1,
'input'=>1,
'optgroup'=>1,
'option'=>1,
'select'=>1,
'textarea'=>1),
'enctype'=>array(
'form'=>1),
'face'=>array(
'font'=>1),
'flashvars'=>array(
'embed'=>1),
'for'=>array(
'label'=>1),
'frame'=>array(
'table'=>1),
'frameborder'=>array(
'iframe'=>1),
'headers'=>array(
'td'=>1,
'th'=>1),
'height'=>array(
'embed'=>1,
'iframe'=>1,
'td'=>1,
'th'=>1,
'img'=>1,
'object'=>1,
'applet'=>1),
'href'=>array(
'a'=>1,
'area'=>1),
'hreflang'=>array(
'a'=>1),
'hspace'=>array(
'applet'=>1,
'img'=>1,
'object'=>1),
'ismap'=>array(
'img'=>1,
'input'=>1),
'label'=>array(
'option'=>1,
'optgroup'=>1),
'language'=>array(
'script'=>1),
'longdesc'=>array(
'img'=>1,
'iframe'=>1),
'marginheight'=>array(
'iframe'=>1),
'marginwidth'=>array(
'iframe'=>1),
'maxlength'=>array(
'input'=>1),
'method'=>array(
'form'=>1),
'model'=>array(
'embed'=>1),
'multiple'=>array(
'select'=>1),
'name'=>array(
'button'=>1,
'embed'=>1,
'textarea'=>1,
'applet'=>1,
'select'=>1,
'form'=>1,
'iframe'=>1,
'img'=>1,
'a'=>1,
'input'=>1,
'object'=>1,
'map'=>1,
'param'=>1),
'nohref'=>array(
'area'=>1),
'noshade'=>array(
'hr'=>1),
'nowrap'=>array(
'td'=>1,
'th'=>1),
'object'=>array(
'applet'=>1),
'onblur'=>array(
'a'=>1,
'area'=>1,
'button'=>1,
'input'=>1,
'label'=>1,
'select'=>1,
'textarea'=>1),
'onchange'=>array(
'input'=>1,
'select'=>1,
'textarea'=>1),
'onfocus'=>array(
'a'=>1,
'area'=>1,
'button'=>1,
'input'=>1,
'label'=>1,
'select'=>1,
'textarea'=>1),
'onreset'=>array(
'form'=>1),
'onselect'=>array(
'input'=>1,
'textarea'=>1),
'onsubmit'=>array(
'form'=>1),
'pluginspage'=>array(
'embed'=>1),
'pluginurl'=>array(
'embed'=>1),
'prompt'=>array(
'isindex'=>1),
'readonly'=>array(
'textarea'=>1,
'input'=>1),
'rel'=>array(
'a'=>1),
'rev'=>array(
'a'=>1),
'rows'=>array(
'textarea'=>1),
'rowspan'=>array(
'td'=>1,
'th'=>1),
'rules'=>array(
'table'=>1),
'scope'=>array(
'td'=>1,
'th'=>1),
'scrolling'=>array(
'iframe'=>1),
'selected'=>array(
'option'=>1),
'shape'=>array(
'area'=>1,
'a'=>1),
'size'=>array(
'hr'=>1,
'font'=>1,
'input'=>1,
'select'=>1),
'span'=>array(
'col'=>1,
'colgroup'=>1),
'src'=>array(
'embed'=>1,
'script'=>1,
'input'=>1,
'iframe'=>1,
'img'=>1),
'standby'=>array(
'object'=>1),
'start'=>array(
'ol'=>1),
'summary'=>array(
'table'=>1),
'tabindex'=>array(
'a'=>1,
'area'=>1,
'button'=>1,
'input'=>1,
'object'=>1,
'select'=>1,
'textarea'=>1),
'target'=>array(
'a'=>1,
'area'=>1,
'form'=>1),
'type'=>array(
'a'=>1,
'embed'=>1,
'object'=>1,
'param'=>1,
'script'=>1,
'input'=>1,
'li'=>1,
'ol'=>1,
'ul'=>1,
'button'=>1),
'usemap'=>array(
'img'=>1,
'input'=>1,
'object'=>1),
'valign'=>array(
'col'=>1,
'colgroup'=>1,
'tbody'=>1,
'td'=>1,
'tfoot'=>1,
'th'=>1,
'thead'=>1,
'tr'=>1),
'value'=>array(
'input'=>1,
'option'=>1,
'param'=>1,
'button'=>1,
'li'=>1),
'valuetype'=>array(
'param'=>1),
'vspace'=>array(
'applet'=>1,
'img'=>1,
'object'=>1),
'width'=>array(
'embed'=>1,
'hr'=>1,
'iframe'=>1,
'img'=>1,
'object'=>1,
'table'=>1,
'td'=>1,
'th'=>1,
'applet'=>1,
'col'=>1,
'colgroup'=>1,
'pre'=>1),
'wmode'=>array(
'embed'=>1),
'xml:space'=>array(
'pre'=>1,
'script'=>1,
'style'=>1));
966 static $aNE = array(
'checked'=>1,
'compact'=>1,
'declare'=>1,
'defer'=>1,
'disabled'=>1,
'ismap'=>1,
'multiple'=>1,
'nohref'=>1,
'noresize'=>1,
'noshade'=>1,
'nowrap'=>1,
'readonly'=>1,
'selected'=>1);
969 static $aNP = array(
'action'=>1,
'cite'=>1,
'classid'=>1,
'codebase'=>1,
'data'=>1,
'href'=>1,
'longdesc'=>1,
'model'=>1,
'pluginspage'=>1,
'pluginurl'=>1,
'usemap'=>1);
972 static $aNU = array(
'class'=>array(
'param'=>1,
'script'=>1),
'dir'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'iframe'=>1,
'param'=>1,
'script'=>1),
'id'=>array(
'script'=>1),
'lang'=>array(
'applet'=>1,
'br'=>1,
'iframe'=>1,
'param'=>1,
'script'=>1),
'xml:lang'=>array(
'applet'=>1,
'br'=>1,
'iframe'=>1,
'param'=>1,
'script'=>1),
'onclick'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'ondblclick'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'onkeydown'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'onkeypress'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'onkeyup'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'onmousedown'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'onmousemove'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'onmouseout'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'onmouseover'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'onmouseup'=>array(
'applet'=>1,
'bdo'=>1,
'br'=>1,
'font'=>1,
'iframe'=>1,
'isindex'=>1,
'param'=>1,
'script'=>1),
'style'=>array(
'param'=>1,
'script'=>1),
'title'=>array(
'param'=>1,
'script'=>1));
975 if ($C[
'lc_std_val'])
978 static $aNL = array(
'all'=>1,
'baseline'=>1,
'bottom'=>1,
'button'=>1,
'center'=>1,
'char'=>1,
'checkbox'=>1,
'circle'=>1,
'col'=>1,
'colgroup'=>1,
'cols'=>1,
'data'=>1,
'default'=>1,
'file'=>1,
'get'=>1,
'groups'=>1,
'hidden'=>1,
'image'=>1,
'justify'=>1,
'left'=>1,
'ltr'=>1,
'middle'=>1,
'none'=>1,
'object'=>1,
'password'=>1,
'poly'=>1,
'post'=>1,
'preserve'=>1,
'radio'=>1,
'rect'=>1,
'ref'=>1,
'reset'=>1,
'right'=>1,
'row'=>1,
'rowgroup'=>1,
'rows'=>1,
'rtl'=>1,
'submit'=>1,
'text'=>1,
'top'=>1);
979 static $eAL = array(
'a'=>1,
'area'=>1,
'bdo'=>1,
'button'=>1,
'col'=>1,
'form'=>1,
'img'=>1,
'input'=>1,
'object'=>1,
'optgroup'=>1,
'option'=>1,
'param'=>1,
'script'=>1,
'select'=>1,
'table'=>1,
'td'=>1,
'tfoot'=>1,
'th'=>1,
'thead'=>1,
'tr'=>1,
'xml:space'=>1);
980 $lcase = isset($eAL[$e]) ? 1 :
985 if ($C[
'no_deprecated_attr'])
988 static $aND = array(
'align'=>array(
'caption'=>1,
'div'=>1,
'h1'=>1,
'h2'=>1,
'h3'=>1,
'h4'=>1,
'h5'=>1,
'h6'=>1,
'hr'=>1,
'img'=>1,
'input'=>1,
'legend'=>1,
'object'=>1,
'p'=>1,
'table'=>1),
'bgcolor'=>array(
'table'=>1,
'td'=>1,
'th'=>1,
'tr'=>1),
'border'=>array(
'img'=>1,
'object'=>1),
'bordercolor'=>array(
'table'=>1,
'td'=>1,
'tr'=>1),
'clear'=>array(
'br'=>1),
'compact'=>array(
'dl'=>1,
'ol'=>1,
'ul'=>1),
'height'=>array(
'td'=>1,
'th'=>1),
'hspace'=>array(
'img'=>1,
'object'=>1),
'language'=>array(
'script'=>1),
'name'=>array(
'a'=>1,
'form'=>1,
'iframe'=>1,
'img'=>1,
'map'=>1),
'noshade'=>array(
'hr'=>1),
'nowrap'=>array(
'td'=>1,
'th'=>1),
'size'=>array(
'hr'=>1),
'start'=>array(
'ol'=>1),
'type'=>array(
'li'=>1,
'ol'=>1,
'ul'=>1),
'value'=>array(
'li'=>1),
'vspace'=>array(
'img'=>1,
'object'=>1),
'width'=>array(
'hr'=>1,
'pre'=>1,
'td'=>1,
'th'=>1));
989 static $eAD = array(
'a'=>1,
'br'=>1,
'caption'=>1,
'div'=>1,
'dl'=>1,
'form'=>1,
'h1'=>1,
'h2'=>1,
'h3'=>1,
'h4'=>1,
'h5'=>1,
'h6'=>1,
'hr'=>1,
'iframe'=>1,
'img'=>1,
'input'=>1,
'legend'=>1,
'li'=>1,
'map'=>1,
'object'=>1,
'ol'=>1,
'p'=>1,
'pre'=>1,
'script'=>1,
'table'=>1,
'td'=>1,
'th'=>1,
'tr'=>1,
'ul'=>1);
990 $depTr = isset($eAD[$e]) ? 1 : 0;
995 if (strpos($a,
"\x01") !==
false)
997 $a = preg_replace(
'`\x01[^\x01]*\x01`',
'', $a);
1001 $a = trim($a,
' /');
1011 if (preg_match(
'`^[a-zA-Z][\-a-zA-Z:]+`', $a, $m))
1013 $nm = strtolower($m[0]);
1015 $a = ltrim(substr_replace($a,
'', 0, strlen($m[0])));
1025 $a = ltrim($a,
'= ');
1040 if (preg_match(
'`^((?:"[^"]*")|(?:\'[^\']*\')|(?:\s*[^\s"\']+))(.*)`', $a, $m))
1046 $aA[$nm] = trim(($m[0] ==
'"' or $m[0] ==
'\'') ? substr($m, 1, -1) : $m);
1054 $a = preg_replace(
'`^(?:"[^"]*("|$)|\'[^\']*(\'|$)|\S)*\s*`',
'', $a);
1065 $rl = isset($S[$e]) ? $S[$e] : array();
1068 foreach ($aA as $k=>$v)
1070 if (((isset($C[
'deny_attribute'][
'*']) ? isset($C[
'deny_attribute'][$k]) : !isset($C[
'deny_attribute'][$k])) && (isset($aN[$k][$e]) or(isset($aNU[$k]) && !isset($aNU[$k][$e]))) && !isset($rl[
'n'][$k]) && !isset($rl[
'n'][
'*'])) or isset($rl[$k]))
1072 if (isset($aNE[$k]))
1077 elseif (!empty($lcase) && (($e !=
'button' or $e !=
'input') or $k ==
'type'))
1080 $v = (isset($aNL[($v2 = strtolower($v))])) ? $v2 : $v;
1082 if ($k ==
'style' && !$C[
'style_pass'])
1084 if (
false !== strpos($v,
'&#'))
1086 static $sC = array(
' '=>
' ',
' '=>
' ',
'E;'=>
'e',
'E;'=>
'e',
'e;'=>
'e',
'e;'=>
'e',
'X;'=>
'x',
'X;'=>
'x',
'x;'=>
'x',
'x;'=>
'x',
'P;'=>
'p',
'P;'=>
'p',
'p;'=>
'p',
'p;'=>
'p',
'S;'=>
's',
'S;'=>
's',
's;'=>
's',
's;'=>
's',
'I;'=>
'i',
'I;'=>
'i',
'i;'=>
'i',
'i;'=>
'i',
'O;'=>
'o',
'O;'=>
'o',
'o;'=>
'o',
'o;'=>
'o',
'N;'=>
'n',
'N;'=>
'n',
'n;'=>
'n',
'n;'=>
'n',
'U;'=>
'u',
'U;'=>
'u',
'u;'=>
'u',
'u;'=>
'u',
'R;'=>
'r',
'R;'=>
'r',
'r;'=>
'r',
'r;'=>
'r',
'L;'=>
'l',
'L;'=>
'l',
'l;'=>
'l',
'l;'=>
'l',
'(;'=>
'(',
'(;'=>
'(',
');'=>
')',
');'=>
')',
' '=>
':',
' '=>
':',
'";'=>
'"',
'";'=>
'"',
'''=>
"'",
'''=>
"'",
'/;'=>
'/',
'/;'=>
'/',
'*;'=>
'*',
'*;'=>
'*',
''=>
'\\',
''=>
'\\');
1087 $v = strtr($v, $sC);
1089 $v = preg_replace_callback(
'`(url(?:\()(?: )*(?:\'|"|&(?:quot|apos);)?)(.+?)((?:\'|"|&(?:quot|apos);)?(?: )*(?:\)))`iS',
'hl_prot', $v);
1090 $v = !$C[
'css_expression'] ? preg_replace(
'`expression`i',
' ', preg_replace(
'`\\\\\S|(/|(%2f))(\*|(%2a))`i',
' ', $v)) : $v;
1093 if (isset($aNP[$k]) or strpos($k,
'src') !==
false or $k[0] ==
'o')
1095 $v = str_replace(
"\xad",
' ', (strpos($v,
'&') !==
false ? str_replace(array(
'­',
'­',
'­'),
' ', $v) : $v));
1096 $v = hl_prot($v, $k);
1101 if ($C[
'anti_mail_spam'] && strpos($v,
'mailto:') === 0)
1103 $v = str_replace(
'@', htmlspecialchars($C[
'anti_mail_spam']), $v);
1106 if ($C[
'anti_link_spam'])
1108 $r1 = $C[
'anti_link_spam'][1];
1109 if (!empty($r1) && preg_match($r1, $v))
1113 $r0 = $C[
'anti_link_spam'][0];
1114 if (!empty($r0) && preg_match($r0, $v))
1116 if (isset($a[
'rel']))
1118 if (!preg_match(
'`\bnofollow\b`i', $a[
'rel']))
1120 $a[
'rel'] .=
' nofollow';
1124 if (isset($aA[
'rel']))
1126 if (!preg_match(
'`\bnofollow\b`i', $aA[
'rel']))
1133 $a[
'rel'] =
'nofollow';
1139 if (isset($rl[$k]) && is_array($rl[$k]) && ($v = hl_attrval($v, $rl[$k])) === 0)
1143 $a[$k] = str_replace(
'"',
'"', $v);
1148 $a[
'rel'] = isset($a[
'rel']) ? $a[
'rel'].
' nofollow' :
'nofollow';
1153 static $eAR = array(
'area'=>array(
'alt'=>
'area'),
'bdo'=>array(
'dir'=>
'ltr'),
'form'=>array(
'action'=>
''),
'img'=>array(
'src'=>
'',
'alt'=>
''),
'map'=>array(
'name'=>
''),
'optgroup'=>array(
'label'=>
''),
'param'=>array(
'name'=>
''),
'script'=>array(
'type'=>
'text/javascript'),
'textarea'=>array(
'rows'=>
'10',
'cols'=>
'50'));
1154 if (isset($eAR[$e]))
1156 foreach ($eAR[$e] as $k=>$v)
1160 $a[$k] = isset($v[0]) ? $v : $k;
1169 foreach ($a as $k=>$v)
1171 if ($k ==
'style' or !isset($aND[$k][$e]))
1178 if ($e ==
'img' && ($v ==
'left' or $v ==
'right'))
1180 $c[] =
'float: '. $v;
1183 if (($e ==
'div' or $e ==
'table') && $v ==
'center')
1185 $c[] =
'margin: auto';
1189 $c[] =
'text-align: '. $v;
1193 if ($k ==
'bgcolor')
1195 unset($a[
'bgcolor']);
1196 $c[] =
'background-color: '. $v;
1201 unset($a[
'border']);
1202 $c[] =
"border: {$v}px";
1205 if ($k ==
'bordercolor')
1207 unset($a[
'bordercolor']);
1208 $c[] =
'border-color: '. $v;
1214 $c[] =
'clear: '. ($v !=
'all' ? $v :
'both');
1217 if ($k ==
'compact')
1219 unset($a[
'compact']);
1220 $c[] =
'font-size: 85%';
1223 if ($k ==
'height' or $k ==
'width')
1226 $c[] = $k.
': '. ($v[0] !=
'*' ? $v. (ctype_digit($v) ?
'px' :
'') :
'auto');
1231 unset($a[
'hspace']);
1232 $c[] =
"margin-left: {$v}px; margin-right: {$v}px";
1235 if ($k ==
'language' && !isset($a[
'type']))
1237 unset($a[
'language']);
1238 $a[
'type'] =
'text/'. strtolower($v);
1243 if ($C[
'no_deprecated_attr'] == 2 or($e !=
'a' && $e !=
'map'))
1247 if (!isset($a[
'id']) && preg_match(
'`[a-zA-Z][a-zA-Z\d.:_\-]*`', $v))
1253 if ($k ==
'noshade')
1255 unset($a[
'noshade']);
1256 $c[] =
'border-style: none; border: 0; background-color: gray; color: gray';
1261 unset($a[
'nowrap']);
1262 $c[] =
'white-space: nowrap';
1268 $c[] =
'size: '. $v.
'px';
1271 if ($k ==
'start' or $k ==
'value')
1279 static $ol_type = array(
'i'=>
'lower-roman',
'I'=>
'upper-roman',
'a'=>
'lower-latin',
'A'=>
'upper-latin',
'1'=>
'decimal');
1280 $c[] =
'list-style-type: '. (isset($ol_type[$v]) ? $ol_type[$v] :
'decimal');
1285 unset($a[
'vspace']);
1286 $c[] =
"margin-top: {$v}px; margin-bottom: {$v}px";
1291 $c = implode(
'; ', $c);
1292 $a[
'style'] = isset($a[
'style']) ? rtrim($a[
'style'],
' ;').
'; '. $c.
';': $c.
';';
1296 if ($C[
'unique_ids'] && isset($a[
'id']))
1298 if (!preg_match(
'`^[A-Za-z][A-Za-z0-9_\-.:]*$`', (
$id = $a[
'id'])) or(isset(
$GLOBALS[
'hl_Ids'][
$id]) && $C[
'unique_ids'] == 1))
1304 while (isset(
$GLOBALS[
'hl_Ids'][$id]))
1306 $id = $C[
'unique_ids'].
$id;
1312 if ($C[
'xml:lang'] && isset($a[
'lang']))
1314 $a[
'xml:lang'] = isset($a[
'xml:lang']) ? $a[
'xml:lang'] : $a[
'lang'];
1315 if ($C[
'xml:lang'] == 2)
1323 $a[
'style'] = isset($a[
'style']) ? rtrim($a[
'style'],
' ;').
'; '. $trt : $trt;
1326 if (empty($C[
'hook_tag']))
1329 foreach ($a as $k=>$v)
1331 $aA .=
" {$k}=\"{$v}\"";
1333 return "<{$e}{$aA}". (isset($eE[$e]) ?
' /' :
'').
'>';
1337 return $C[
'hook_tag']($e, $a);
1342 function hl_tag2(&$e, &$a, $t=1)
1348 return 'text-align: center;';
1350 if ($e ==
'dir' or $e ==
'menu')
1355 if ($e ==
's' or $e ==
'strike')
1358 return 'text-decoration: line-through;';
1363 return 'text-decoration: underline;';
1365 static $fs = array(
'0'=>
'xx-small',
'1'=>
'xx-small',
'2'=>
'small',
'3'=>
'medium',
'4'=>
'large',
'5'=>
'x-large',
'6'=>
'xx-large',
'7'=>
'300%',
'-1'=>
'smaller',
'-2'=>
'60%',
'+1'=>
'larger',
'+2'=>
'150%',
'+3'=>
'200%',
'+4'=>
'300%');
1369 if (preg_match(
'`face\s*=\s*(\'|")([^=]+?)\\1`i', $a, $m) or preg_match(
'`face\s*=(\s*)(\S+)`i', $a, $m))
1371 $a2 .=
' font-family: '. str_replace(
'"',
'\'', trim($m[2])).
';';
1373 if (preg_match(
'`color\s*=\s*(\'|")?(.+?)(\\1|\s|$)`i', $a, $m))
1375 $a2 .=
' color: '. trim($m[2]).
';';
1377 if (preg_match(
'`size\s*=\s*(\'|")?(.+?)(\\1|\s|$)`i', $a, $m) && isset($fs[($m = trim($m[2]))]))
1379 $a2 .=
' font-size: '. $fs[$m].
';';
1393 function hl_tidy($t, $w, $p)
1396 if (strpos(
' pre,script,textarea',
"$p,"))
1400 $t = str_replace(
' </',
'</', preg_replace(array(
'`(<\w[^>]*(?<!/)>)\s+`',
'`\s+`',
'`(<\w[^>]*(?<!/)>) `'), array(
' ',
' ',
''), preg_replace_callback(array(
'`(<(!\[CDATA\[))(.+?)(\]\]>)`sm',
'`(<(!--))(.+?)(-->)`sm',
'`(<(pre|script|textarea)[^>]*?>)(.+?)(</>)`sm'), create_function(
'$m',
'return $m[1]. str_replace(array("<", ">", "\n", "\r", "\t", " "), array("\x01", "\x02", "\x03", "\x04", "\x05", "\x07"), $m[3]). $m[4];
1402 if (($w = strtolower($w)) == -1)
1404 return str_replace(array(
"\x01",
"\x02",
"\x03",
"\x04",
"\x05",
"\x07"), array(
'<',
'>',
"\n",
"\r",
"\t",
' '), $t);
1406 $s = strpos(
" $w",
't') ?
"\t" :
' ';
1407 $s = preg_match(
'`\d`', $w, $m) ? str_repeat($s, $m[0]) : str_repeat($s, ($s ==
"\t" ? 1 : 2));
1408 $N = preg_match(
'`[ts]([1-9])`', $w, $m) ? $m[1] : 0;
1409 $a = array(
'br'=>1);
1410 $b = array(
'button'=>1,
'input'=>1,
'option'=>1);
1411 $c = array(
'caption'=>1,
'dd'=>1,
'dt'=>1,
'h1'=>1,
'h2'=>1,
'h3'=>1,
'h4'=>1,
'h5'=>1,
'h6'=>1,
'isindex'=>1,
'label'=>1,
'legend'=>1,
'li'=>1,
'object'=>1,
'p'=>1,
'pre'=>1,
'td'=>1,
'textarea'=>1,
'th'=>1);
1412 $d = array(
'address'=>1,
'blockquote'=>1,
'center'=>1,
'colgroup'=>1,
'dir'=>1,
'div'=>1,
'dl'=>1,
'fieldset'=>1,
'form'=>1,
'hr'=>1,
'iframe'=>1,
'map'=>1,
'menu'=>1,
'noscript'=>1,
'ol'=>1,
'optgroup'=>1,
'rbc'=>1,
'rtc'=>1,
'ruby'=>1,
'script'=>1,
'select'=>1,
'table'=>1,
'tbody'=>1,
'tfoot'=>1,
'thead'=>1,
'tr'=>1,
'ul'=>1);
1413 $T = explode(
'<', $t);
1422 echo str_repeat($s, ++$n);
1424 echo ltrim(array_shift($t));
1425 for ($i=-1, $j=count($t); ++$i<$j; )
1428 list($e, $r) = explode(
'>', $t[$i]);
1429 $x = $e[0] ==
'/' ? 0 : (substr($e, -1) ==
'/' ? 1 : ($e[0] !=
'!' ? 2 : -1));
1430 $y = !$x ? ltrim($e,
'/') : ($x > 0 ? substr($e, 0, strcspn($e,
' ')) : 0);
1438 echo
"\n", str_repeat($s, --$n),
"$e\n", str_repeat($s, $n);
1449 echo
"\n", str_repeat($s, $n),
"$e\n", str_repeat($s, ($x != 1 ? ++$n : $n));
1454 $f =
"\n". str_repeat($s, $n);
1459 echo $e, $f, ltrim($r);
1474 echo $e, $f, ltrim($r);
1479 echo $f, $e, $f, ltrim($r);
1488 $t = preg_replace(
'`[\n]\s*?[\n]+`',
"\n", ob_get_contents());
1490 if ((
$l = strpos(
" $w",
'r') ? (strpos(
" $w",
'n') ?
"\r\n" :
"\r") : 0))
1492 $t = str_replace(
"\n",
$l, $t);
1494 return str_replace(array(
"\x01",
"\x02",
"\x03",
"\x04",
"\x05",
"\x07"), array(
'<',
'>',
"\n",
"\r",
"\t",
' '), $t);
1498 function hl_version()
1505 function kses($t, $h, $p=array(
'http',
'https',
'ftp',
'news',
'nntp',
'telnet',
'gopher',
'mailto'))
1508 foreach ($h as $k=>$v)
1510 $h[$k][
'n'][
'*'] = 1;
1512 $C[
'cdata'] = $C[
'comment'] = $C[
'make_tag_strict'] = $C[
'no_deprecated_attr'] = $C[
'unique_ids'] = 0;
1514 $C[
'elements'] = count($h) ? strtolower(implode(
',', array_keys($h))) :
'-*';
1515 $C[
'hook'] =
'kses_hook';
1516 $C[
'schemes'] =
'*:'. implode(
',', $p);
1517 return htmLawed($t, $C, $h);
1521 function kses_hook($t, &$C, &$S)
if(strlen($date2)== '10') if($type== 'users-by-age'&&a_priv('admin_users', true)) elseif($type== 'forums-count'&&a_priv('admin_content', true)) elseif($type== 'forums-categories'&&a_priv('admin_content', true)) elseif($type== 'users-count'&&a_priv('admin_users', true)) elseif($type== 'product-categories'&&a_priv('admin_products', true)) elseif($type== 'users-by-sex'&&a_priv('admin_users', true)) elseif($type== 'users-by-country'&&a_priv('admin_users', true)) elseif($type== 'sales'&&a_priv('admin_sales', true))
if(empty($GLOBALS['site_parameters']['unsubscribe_order_process']))
$GLOBALS['page_columns_count']