Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php // This file is protected by copyright law and provided under license. Reverse engin..
Decoded Output download
$O000O0O00=fopen($OOO0O0O00,'rb');while(--$O00O00O00)fgets($O000O0O00,1024);fgets($O000O0O00,4096);$OO00O00O0=(base64_decode(strtr(fread($O000O0O00,372),'IHTDXVKQ5Ra3v8E9secfNzuiWoYlSZ6yd1+bCwMqJOg0/hFG4rtP7nA2pjxLUBkm=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));eval($OO00O00O0);$OO00O00O0=ereg_replace('__FILE__',"'".$OOO0O0O00."'",(base64_decode(strtr(fread($O000O0O00,$OO00O0000),'IHTDXVKQ5Ra3v8E9secfNzuiWoYlSZ6yd1+bCwMqJOg0/hFG4rtP7nA2pjxLUBkm=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))));fclose($O000O0O00);eval($OO00O00O0);
/**
* Website: http://sourceforge.net/projects/simplehtmldom/
* Additional projects that may be used: http://sourceforge.net/projects/debugobject/
* Acknowledge: Jose Solorzano (https://sourceforge.net/projects/php-html/)
* Contributions by:
* Yousuke Kumakura (Attribute filters)
* Vadim Voituk (Negative indexes supports of "find" method)
* Antcs (Constructor with automatically load contents either text or file/url)
*
* all affected sections have comments starting with "PaperG"
*
* Paperg - Added case insensitive testing of the value of the selector.
* Paperg - Added tag_start for the starting index of tags - NOTE: This works but not accurately.
* This tag_start gets counted AFTER
have been crushed out, and after the remove_noice calls so it will not reflect the REAL position of the tag in the source,
* it will almost always be smaller by some amount.
* We use this to determine how far into the file the tag in question is. This "percentage will never be accurate as the $dom->size is the "real" number of bytes the dom was created from.
* but for most purposes, it's a really good estimation.
* Paperg - Added the forceTagsClosed to the dom constructor. Forcing tags closed is great for malformed html, but it CAN lead to parsing errors.
* Allow the user to tell us how much they trust the html.
* Paperg add the text and plaintext to the selectors for the find syntax. plaintext implies text in the innertext of a node. text implies that the tag is a text node.
* This allows for us to find tags based on the text they contain.
* Create find_ancestor_tag to see if a tag is - at any level - inside of another specific tag.
* Paperg: added parse_charset so that we know about the character set of the source document.
* NOTE: If the user's system has a routine called get_last_retrieve_url_contents_content_type availalbe, we will assume it's returning the content-type header from the
* last transfer or curl_exec, and we will parse that and use it in preference to any other method of charset detection.
*
* Found infinite loop in the case of broken html in restore_noise. Rewrote to protect from that.
* PaperG (John Schlick) Added get_display_size for "IMG" tags.
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @author S.C. Chen <[email protected]>
* @author John Schlick
* @author Rus Carroll
* @version 1.5 ($Rev: 202 $)
* @package PlaceLocalInclude
* @subpackage simple_html_dom
*/
/**
* All of the Defines for the classes below.
* @author S.C. Chen <[email protected]>
*/
define('HDOM_TYPE_ELEMENT', 1);
define('HDOM_TYPE_COMMENT', 2);
define('HDOM_TYPE_TEXT', 3);
define('HDOM_TYPE_ENDTAG', 4);
define('HDOM_TYPE_ROOT', 5);
define('HDOM_TYPE_UNKNOWN', 6);
define('HDOM_QUOTE_DOUBLE', 0);
define('HDOM_QUOTE_SINGLE', 1);
define('HDOM_QUOTE_NO', 3);
define('HDOM_INFO_BEGIN', 0);
define('HDOM_INFO_END', 1);
define('HDOM_INFO_QUOTE', 2);
define('HDOM_INFO_SPACE', 3);
define('HDOM_INFO_TEXT', 4);
define('HDOM_INFO_INNER', 5);
define('HDOM_INFO_OUTER', 6);
define('HDOM_INFO_ENDSPACE',7);
define('DEFAULT_TARGET_CHARSET', 'UTF-8');
define('DEFAULT_BR_TEXT', "
");
define('DEFAULT_SPAN_TEXT', " ");
define('MAX_FILE_SIZE', 600000);
// helper functions
// -----------------------------------------------------------------------------
// get html dom from file
// $maxlen is defined in the code as PHP_STREAM_COPY_ALL which is defined as -1.
function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
// We DO force the tags to be terminated.
$dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
// For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done.
$contents = file_get_contents($url, $use_include_path, $context, $offset);
// Paperg - use our own mechanism for getting the contents as we want to control the timeout.
//$contents = retrieve_url_contents($url);
if (empty($contents) || strlen($contents) > MAX_FILE_SIZE)
{
return false;
}
// The second parameter can force the selectors to all be lowercase.
$dom->load($contents, $lowercase, $stripRN);
return $dom;
}
// get html dom from string
function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
$dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
if (empty($str) || strlen($str) > MAX_FILE_SIZE)
{
$dom->clear();
return false;
}
$dom->load($str, $lowercase, $stripRN);
return $dom;
}
// dump html dom tree
function dump_html_tree($node, $show_attr=true, $deep=0)
{
$node->dump($node);
}
/**
* simple html dom node
* PaperG - added ability for "find" routine to lowercase the value of the selector.
* PaperG - added $tag_start to track the start position of the tag in the total byte index
*
* @package PlaceLocalInclude
*/
class simple_html_dom_node
{
public $nodetype = HDOM_TYPE_TEXT;
public $tag = 'text';
public $attr = array();
public $children = array();
public $nodes = array();
public $parent = null;
// The "info" array - see HDOM_INFO_... for what each element contains.
public $_ = array();
public $tag_start = 0;
private $dom = null;
function __construct($dom)
{
$this->dom = $dom;
$dom->nodes[] = $this;
}
function __destruct()
{
$this->clear();
}
function __toString()
{
return $this->outertext();
}
// clean up memory due to php5 circular references memory leak...
function clear()
{
$this->dom = null;
$this->nodes = null;
$this->parent = null;
$this->children = null;
}
// dump node's tree
function dump($show_attr=true, $deep=0)
{
$lead = str_repeat(' ', $deep);
echo $lead.$this->tag;
if ($show_attr && count($this->attr)>0)
{
echo '(';
foreach ($this->attr as $k=>$v)
echo "[$k]=>\"".$this->$k.'", ';
echo ')';
}
echo "
";
if ($this->nodes)
{
foreach ($this->nodes as $c)
{
$c->dump($show_attr, $deep+1);
}
}
}
// Debugging function to dump a single dom node with a bunch of information about it.
function dump_node($echo=true)
{
$string = $this->tag;
if (count($this->attr)>0)
{
$string .= '(';
foreach ($this->attr as $k=>$v)
{
$string .= "[$k]=>\"".$this->$k.'", ';
}
$string .= ')';
}
if (count($this->_)>0)
{
$string .= ' $_ (';
foreach ($this->_ as $k=>$v)
{
if (is_array($v))
{
$string .= "[$k]=>(";
foreach ($v as $k2=>$v2)
{
$string .= "[$k2]=>\"".$v2.'", ';
}
$string .= ")";
} else {
$string .= "[$k]=>\"".$v.'", ';
}
}
$string .= ")";
}
if (isset($this->text))
{
$string .= " text: (" . $this->text . ")";
}
$string .= " HDOM_INNER_INFO: '";
if (isset($node->_[HDOM_INFO_INNER]))
{
$string .= $node->_[HDOM_INFO_INNER] . "'";
}
else
{
$string .= ' NULL ';
}
$string .= " children: " . count($this->children);
$string .= " nodes: " . count($this->nodes);
$string .= " tag_start: " . $this->tag_start;
$string .= "
";
if ($echo)
{
echo $string;
return;
}
else
{
return $string;
}
}
// returns the parent of node
// If a node is passed in, it will reset the parent of the current node to that one.
function parent($parent=null)
{
// I am SURE that this doesn't work properly.
// It fails to unset the current node from it's current parents nodes or children list first.
if ($parent !== null)
{
$this->parent = $parent;
$this->parent->nodes[] = $this;
$this->parent->children[] = $this;
}
return $this->parent;
}
// verify that node has children
function has_child()
{
return !empty($this->children);
}
// returns children of node
function children($idx=-1)
{
if ($idx===-1)
{
return $this->children;
}
if (isset($this->children[$idx])) return $this->children[$idx];
return null;
}
// returns the first child of node
function first_child()
{
if (count($this->children)>0)
{
return $this->children[0];
}
return null;
}
// returns the last child of node
function last_child()
{
if (($count=count($this->children))>0)
{
return $this->children[$count-1];
}
return null;
}
// returns the next sibling of node
function next_sibling()
{
if ($this->parent===null)
{
return null;
}
$idx = 0;
$count = count($this->parent->children);
while ($idx<$count && $this!==$this->parent->children[$idx])
{
++$idx;
}
if (++$idx>=$count)
{
return null;
}
return $this->parent->children[$idx];
}
// returns the previous sibling of node
function prev_sibling()
{
if ($this->parent===null) return null;
$idx = 0;
$count = count($this->parent->children);
while ($idx<$count && $this!==$this->parent->children[$idx])
++$idx;
if (--$idx<0) return null;
return $this->parent->children[$idx];
}
// function to locate a specific ancestor tag in the path to the root.
function find_ancestor_tag($tag)
{
global $debug_object;
if (is_object($debug_object)) { $debug_object->debugLogEntry(1); }
// Start by including ourselves in the comparison.
$returnDom = $this;
while (!is_null($returnDom))
{
if (is_object($debug_object)) { $debug_object->debugLog(2, "Current tag is: " . $returnDom->tag); }
if ($returnDom->tag == $tag)
{
break;
}
$returnDom = $returnDom->parent;
}
return $returnDom;
}
// get dom node's inner html
function innertext()
{
if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER];
if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]);
$ret = '';
foreach ($this->nodes as $n)
$ret .= $n->outertext();
return $ret;
}
// get dom node's outer text (with tag)
function outertext()
{
global $debug_object;
if (is_object($debug_object))
{
$text = '';
if ($this->tag == 'text')
{
if (!empty($this->text))
{
$text = " with text: " . $this->text;
}
}
$debug_object->debugLog(1, 'Innertext of tag: ' . $this->tag . $text);
}
if ($this->tag==='root') return $this->innertext();
// trigger callback
if ($this->dom && $this->dom->callback!==null)
{
call_user_func_array($this->dom->callback, array($this));
}
if (isset($this->_[HDOM_INFO_OUTER])) return $this->_[HDOM_INFO_OUTER];
if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]);
// render begin tag
if ($this->dom && $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]])
{
$ret = $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]->makeup();
} else {
$ret = "";
}
// render inner text
if (isset($this->_[HDOM_INFO_INNER]))
{
// If it's a br tag... don't return the HDOM_INNER_INFO that we may or may not have added.
if ($this->tag != "br")
{
$ret .= $this->_[HDOM_INFO_INNER];
}
} else {
if ($this->nodes)
{
foreach ($this->nodes as $n)
{
$ret .= $this->convert_text($n->outertext());
}
}
}
// render end tag
if (isset($this->_[HDOM_INFO_END]) && $this->_[HDOM_INFO_END]!=0)
$ret .= '</'.$this->tag.'>';
return $ret;
}
// get dom node's plain text
function text()
{
if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER];
switch ($this->nodetype)
{
case HDOM_TYPE_TEXT: return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]);
case HDOM_TYPE_COMMENT: return '';
case HDOM_TYPE_UNKNOWN: return '';
}
if (strcasecmp($this->tag, 'script')===0) return '';
if (strcasecmp($this->tag, 'style')===0) return '';
$ret = '';
// In rare cases, (always node type 1 or HDOM_TYPE_ELEMENT - observed for some span tags, and some p tags) $this->nodes is set to NULL.
// NOTE: This indicates that there is a problem where it's set to NULL without a clear happening.
// WHY is this happening?
if (!is_null($this->nodes))
{
foreach ($this->nodes as $n)
{
$ret .= $this->convert_text($n->text());
}
// If this node is a span... add a space at the end of it so multiple spans don't run into each other. This is plaintext after all.
if ($this->tag == "span")
{
$ret .= $this->dom->default_span_text;
}
}
return $ret;
}
function xmltext()
{
$ret = $this->innertext();
$ret = str_ireplace('<![CDATA[', '', $ret);
$ret = str_replace(']]>', '', $ret);
return $ret;
}
// build node's text with tag
function makeup()
{
// text, comment, unknown
if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]);
$ret = '<'.$this->tag;
$i = -1;
foreach ($this->attr as $key=>$val)
{
++$i;
// skip removed attribute
if ($val===null || $val===false)
continue;
$ret .= $this->_[HDOM_INFO_SPACE][$i][0];
//no value attr: nowrap, checked selected...
if ($val===true)
$ret .= $key;
else {
switch ($this->_[HDOM_INFO_QUOTE][$i])
{
case HDOM_QUOTE_DOUBLE: $quote = '"'; break;
case HDOM_QUOTE_SINGLE: $quote = '\''; break;
default: $quote = '';
}
$ret .= $key.$this->_[HDOM_INFO_SPACE][$i][1].'='.$this->_[HDOM_INFO_SPACE][$i][2].$quote.$val.$quote;
}
}
$ret = $this->dom->restore_noise($ret);
return $ret . $this->_[HDOM_INFO_ENDSPACE] . '>';
}
// find elements by css selector
//PaperG - added ability for find to lowercase the value of the selector.
function find($selector, $idx=null, $lowercase=false)
{
$selectors = $this->parse_selector($selector);
if (($count=count($selectors))===0) return array();
$found_keys = array();
// find each selector
for ($c=0; $c<$count; ++$c)
{
// The change on the below line was documented on the sourceforge code tracker id 2788009
// used to be: if (($levle=count($selectors[0]))===0) return array();
if (($levle=count($selectors[$c]))===0) return array();
if (!isset($this->_[HDOM_INFO_BEGIN])) return array();
$head = array($this->_[HDOM_INFO_BEGIN]=>1);
// handle descendant selectors, no recursive!
for ($l=0; $l<$levle; ++$l)
{
$ret = array();
foreach ($head as $k=>$v)
{
$n = ($k===-1) ? $this->dom->root : $this->dom->nodes[$k];
//PaperG - Pass this optional parameter on to the seek function.
$n->seek($selectors[$c][$l], $ret, $lowercase);
}
$head = $ret;
}
foreach ($head as $k=>$v)
{
if (!isset($found_keys[$k]))
$found_keys[$k] = 1;
}
}
// sort keys
ksort($found_keys);
$found = array();
foreach ($found_keys as $k=>$v)
$found[] = $this->dom->nodes[$k];
// return nth-element or array
if (is_null($idx)) return $found;
else if ($idx<0) $idx = count($found) + $idx;
return (isset($found[$idx])) ? $found[$idx] : null;
}
// seek for given conditions
// PaperG - added parameter to allow for case insensitive testing of the value of a selector.
protected function seek($selector, &$ret, $lowercase=false)
{
global $debug_object;
if (is_object($debug_object)) { $debug_object->debugLogEntry(1); }
list($tag, $key, $val, $exp, $no_key) = $selector;
// xpath index
if ($tag && $key && is_numeric($key))
{
$count = 0;
foreach ($this->children as $c)
{
if ($tag==='*' || $tag===$c->tag) {
if (++$count==$key) {
$ret[$c->_[HDOM_INFO_BEGIN]] = 1;
return;
}
}
}
return;
}
$end = (!empty($this->_[HDOM_INFO_END])) ? $this->_[HDOM_INFO_END] : 0;
if ($end==0) {
$parent = $this->parent;
while (!isset($parent->_[HDOM_INFO_END]) && $parent!==null) {
$end -= 1;
$parent = $parent->parent;
}
$end += $parent->_[HDOM_INFO_END];
}
for ($i=$this->_[HDOM_INFO_BEGIN]+1; $i<$end; ++$i) {
$node = $this->dom->nodes[$i];
$pass = true;
if ($tag==='*' && !$key) {
if (in_array($node, $this->children, true))
$ret[$i] = 1;
continue;
}
// compare tag
if ($tag && $tag!=$node->tag && $tag!=='*') {$pass=false;}
// compare key
if ($pass && $key) {
if ($no_key) {
if (isset($node->attr[$key])) $pass=false;
} else {
if (($key != "plaintext") && !isset($node->attr[$key])) $pass=false;
}
}
// compare value
if ($pass && $key && $val && $val!=='*') {
// If they have told us that this is a "plaintext" search then we want the plaintext of the node - right?
if ($key == "plaintext") {
// $node->plaintext actually returns $node->text();
$nodeKeyValue = $node->text();
} else {
// this is a normal search, we want the value of that attribute of the tag.
$nodeKeyValue = $node->attr[$key];
}
if (is_object($debug_object)) {$debug_object->debugLog(2, "testing node: " . $node->tag . " for attribute: " . $key . $exp . $val . " where nodes value is: " . $nodeKeyValue);}
//PaperG - If lowercase is set, do a case insensitive test of the value of the selector.
if ($lowercase) {
$check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue));
} else {
$check = $this->match($exp, $val, $nodeKeyValue);
}
if (is_object($debug_object)) {$debug_object->debugLog(2, "after match: " . ($check ? "true" : "false"));}
// handle multiple class
if (!$check && strcasecmp($key, 'class')===0) {
foreach (explode(' ',$node->attr[$key]) as $k) {
// Without this, there were cases where leading, trailing, or double spaces lead to our comparing blanks - bad form.
if (!empty($k)) {
if ($lowercase) {
$check = $this->match($exp, strtolower($val), strtolower($k));
} else {
$check = $this->match($exp, $val, $k);
}
if ($check) break;
}
}
}
if (!$check) $pass = false;
}
if ($pass) $ret[$i] = 1;
unset($node);
}
// It's passed by reference so this is actually what this function returns.
if (is_object($debug_object)) {$debug_object->debugLog(1, "EXIT - ret: ", $ret);}
}
protected function match($exp, $pattern, $value) {
global $debug_object;
if (is_object($debug_object)) {$debug_object->debugLogEntry(1);}
switch ($exp) {
case '=':
return ($value===$pattern);
case '!=':
return ($value!==$pattern);
case '^=':
return preg_match("/^".preg_quote($pattern,'/')."/", $value);
case '$=':
return preg_match("/".preg_quote($pattern,'/')."$/", $value);
case '*=':
if ($pattern[0]=='/') {
return preg_match($pattern, $value);
}
return preg_match("/".$pattern."/i", $value);
}
return false;
}
protected function parse_selector($selector_string) {
global $debug_object;
if (is_object($debug_object)) {$debug_object->debugLogEntry(1);}
// pattern of CSS selectors, modified from mootools// Paperg: Add the colon to the attrbute, so that it properly finds <tag attr:ibute="something" > like google does.
// Note: if you try to look at this attribute, yo MUST use getAttribute since $dom->x:y will fail the php syntax check.
// Notice the \[ starting the attbute? and the @? following? This implies that an attribute can begin with an @ sign that is not captured.
// This implies that an html attribute specifier may start with an @ sign that is NOT captured by the expression.
// farther study is include_onced to determine of this should be documented or removed.
// $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is";
$pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-:]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is";
preg_match_all($pattern, trim($selector_string).' ', $matches, PREG_SET_ORDER);
if (is_object($debug_object)) {$debug_object->debugLog(2, "Matches Array: ", $matches);}
$selectors = array();
$result = array();
//print_r($matches);
foreach ($matches as $m) {
$m[0] = trim($m[0]);
if ($m[0]==='' || $m[0]==='/' || $m[0]==='//') continue;
// for browser generated xpath
if ($m[1]==='tbody') continue;
list($tag, $key, $val, $exp, $no_key) = array($m[1], null, null, '=', false);
if (!empty($m[2])) {$key='id'; $val=$m[2];}
if (!empty($m[3])) {$key='class'; $val=$m[3];}
if (!empty($m[4])) {$key=$m[4];}
if (!empty($m[5])) {$exp=$m[5];}
if (!empty($m[6])) {$val=$m[6];}
// convert to lowercase
if ($this->dom->lowercase) {$tag=strtolower($tag); $key=strtolower($key);}
//elements that do NOT have the specified attribute
if (isset($key[0]) && $key[0]==='!') {$key=substr($key, 1); $no_key=true;}
$result[] = array($tag, $key, $val, $exp, $no_key);
if (trim($m[7])===',') {
$selectors[] = $result;
$result = array();
}
}
if (count($result)>0)
$selectors[] = $result;
return $selectors;
}
function __get($name) {
if (isset($this->attr[$name]))
{
return $this->convert_text($this->attr[$name]);
}
switch ($name) {
case 'outertext': return $this->outertext();
case 'innertext': return $this->innertext();
case 'plaintext': return $this->text();
case 'xmltext': return $this->xmltext();
default: return array_key_exists($name, $this->attr);
}
}
function __set($name, $value) {
switch ($name) {
case 'outertext': return $this->_[HDOM_INFO_OUTER] = $value;
case 'innertext':
if (isset($this->_[HDOM_INFO_TEXT])) return $this->_[HDOM_INFO_TEXT] = $value;
return $this->_[HDOM_INFO_INNER] = $value;
}
if (!isset($this->attr[$name])) {
$this->_[HDOM_INFO_SPACE][] = array(' ', '', '');
$this->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE;
}
$this->attr[$name] = $value;
}
function __isset($name) {
switch ($name) {
case 'outertext': return true;
case 'innertext': return true;
case 'plaintext': return true;
}
//no value attr: nowrap, checked selected...
return (array_key_exists($name, $this->attr)) ? true : isset($this->attr[$name]);
}
function __unset($name) {
if (isset($this->attr[$name]))
unset($this->attr[$name]);
}
// PaperG - Function to convert the text from one character set to another if the two sets are not the same.
function convert_text($text)
{
global $debug_object;
if (is_object($debug_object)) {$debug_object->debugLogEntry(1);}
$converted_text = $text;
$sourceCharset = "";
$targetCharset = "";
if ($this->dom)
{
$sourceCharset = strtoupper($this->dom->_charset);
$targetCharset = strtoupper($this->dom->_target_charset);
}
if (is_object($debug_object)) {$debug_object->debugLog(3, "source charset: " . $sourceCharset . " target charaset: " . $targetCharset);}
if (!empty($sourceCharset) && !empty($targetCharset) && (strcasecmp($sourceCharset, $targetCharset) != 0))
{
// Check if the reported encoding could have been incorrect and the text is actually already UTF-8
if ((strcasecmp($targetCharset, 'UTF-8') == 0) && ($this->is_utf8($text)))
{
$converted_text = $text;
}
else
{
$converted_text = iconv($sourceCharset, $targetCharset, $text);
}
}
// Lets make sure that we don't have that silly BOM issue with any of the utf-8 text we output.
if ($targetCharset == 'UTF-8')
{
if (substr($converted_text, 0, 3) == "")
{
$converted_text = substr($converted_text, 3);
}
if (substr($converted_text, -3) == "")
{
$converted_text = substr($converted_text, 0, -3);
}
}
return $converted_text;
}
/**
* Returns true if $string is valid UTF-8 and false otherwise.
*
* @param mixed $str String to be tested
* @return boolean
*/
static function is_utf8($str)
{
$c=0; $b=0;
$bits=0;
$len=strlen($str);
for($i=0; $i<$len; $i++)
{
$c=ord($str[$i]);
if($c > 128)
{
if(($c >= 254)) return false;
elseif($c >= 252) $bits=6;
elseif($c >= 248) $bits=5;
elseif($c >= 240) $bits=4;
elseif($c >= 224) $bits=3;
elseif($c >= 192) $bits=2;
else return false;
if(($i+$bits) > $len) return false;
while($bits > 1)
{
$i++;
$b=ord($str[$i]);
if($b < 128 || $b > 191) return false;
$bits--;
}
}
}
return true;
}
/*
function is_utf8($string)
{
//this is buggy
return (utf8_encode(utf8_decode($string)) == $string);
}
*/
/**
* Function to try a few tricks to determine the displayed size of an img on the page.
* NOTE: This will ONLY work on an IMG tag. Returns FALSE on all other tag types.
*
* @author John Schlick
* @version April 19 2012
* @return array an array containing the 'height' and 'width' of the image on the page or -1 if we can't figure it out.
*/
function get_display_size()
{
global $debug_object;
$width = -1;
$height = -1;
if ($this->tag !== 'img')
{
return false;
}
// See if there is aheight or width attribute in the tag itself.
if (isset($this->attr['width']))
{
$width = $this->attr['width'];
}
if (isset($this->attr['height']))
{
$height = $this->attr['height'];
}
// Now look for an inline style.
if (isset($this->attr['style']))
{
// Thanks to user gnarf from stackoverflow for this regular expression.
$attributes = array();
preg_match_all("/([\w-]+)\s*:\s*([^;]+)\s*;?/", $this->attr['style'], $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$attributes[$match[1]] = $match[2];
}
// If there is a width in the style attributes:
if (isset($attributes['width']) && $width == -1)
{
// check that the last two characters are px (pixels)
if (strtolower(substr($attributes['width'], -2)) == 'px')
{
$proposed_width = substr($attributes['width'], 0, -2);
// Now make sure that it's an integer and not something stupid.
if (filter_var($proposed_width, FILTER_VALIDATE_INT))
{
$width = $proposed_width;
}
}
}
// If there is a width in the style attributes:
if (isset($attributes['height']) && $height == -1)
{
// check that the last two characters are px (pixels)
if (strtolower(substr($attributes['height'], -2)) == 'px')
{
$proposed_height = substr($attributes['height'], 0, -2);
// Now make sure that it's an integer and not something stupid.
if (filter_var($proposed_height, FILTER_VALIDATE_INT))
{
$height = $proposed_height;
}
}
}
}
// Future enhancement:
// Look in the tag to see if there is a class or id specified that has a height or width attribute to it.
// Far future enhancement
// Look at all the parent tags of this image to see if they specify a class or id that has an img selector that specifies a height or width
// Note that in this case, the class or id will have the img subselector for it to apply to the image.
// ridiculously far future development
// If the class or id is specified in a SEPARATE css file thats not on the page, go get it and do what we were just doing for the ones on the page.
$result = array('height' => $height,
'width' => $width);
return $result;
}
// camel naming conventions
function getAllAttributes() {return $this->attr;}
function getAttribute($name) {return $this->__get($name);}
function setAttribute($name, $value) {$this->__set($name, $value);}
function hasAttribute($name) {return $this->__isset($name);}
function removeAttribute($name) {$this->__set($name, null);}
function getElementById($id) {return $this->find("#$id", 0);}
function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);}
function getElementByTagName($name) {return $this->find($name, 0);}
function getElementsByTagName($name, $idx=null) {return $this->find($name, $idx);}
function parentNode() {return $this->parent();}
function childNodes($idx=-1) {return $this->children($idx);}
function firstChild() {return $this->first_child();}
function lastChild() {return $this->last_child();}
function nextSibling() {return $this->next_sibling();}
function previousSibling() {return $this->prev_sibling();}
function hasChildNodes() {return $this->has_child();}
function nodeName() {return $this->tag;}
function appendChild($node) {$node->parent($this); return $node;}
}
/**
* simple html dom parser
* Paperg - in the find routine: allow us to specify that we want case insensitive testing of the value of the selector.
* Paperg - change $size from protected to public so we can easily access it
* Paperg - added ForceTagsClosed in the constructor which tells us whether we trust the html or not. Default is to NOT trust it.
*
* @package PlaceLocalInclude
*/
class simple_html_dom
{
public $root = null;
public $nodes = array();
public $callback = null;
public $lowercase = false;
// Used to keep track of how large the text was when we started.
public $original_size;
public $size;
protected $pos;
protected $doc;
protected $char;
protected $cursor;
protected $parent;
protected $noise = array();
protected $token_blank = "
";
protected $token_equal = ' =/>';
protected $token_slash = " />
";
protected $token_attr = ' >';
// Note that this is referenced by a child node, and so it needs to be public for that node to see this information.
public $_charset = '';
public $_target_charset = '';
protected $default_br_text = "";
public $default_span_text = "";
// use isset instead of in_array, performance boost about 30%...
protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1);
protected $block_tags = array('root'=>1, 'body'=>1, 'form'=>1, 'div'=>1, 'span'=>1, 'table'=>1);
// Known sourceforge issue #2977341
// B tags that are not closed cause us to return everything to the end of the document.
protected $optional_closing_tags = array(
'tr'=>array('tr'=>1, 'td'=>1, 'th'=>1),
'th'=>array('th'=>1),
'td'=>array('td'=>1),
'li'=>array('li'=>1),
'dt'=>array('dt'=>1, 'dd'=>1),
'dd'=>array('dd'=>1, 'dt'=>1),
'dl'=>array('dd'=>1, 'dt'=>1),
'p'=>array('p'=>1),
'nobr'=>array('nobr'=>1),
'b'=>array('b'=>1),
'option'=>array('option'=>1),
);
function __construct($str=null, $lowercase=true, $forceTagsClosed=true, $target_charset=DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
if ($str)
{
if (preg_match("/^http:\/\//i",$str) || is_file($str))
{
$this->load_file($str);
}
else
{
$this->load($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText);
}
}
// Forcing tags to be closed implies that we don't trust the html, but it can lead to parsing errors if we SHOULD trust the html.
if (!$forceTagsClosed) {
$this->optional_closing_array=array();
}
$this->_target_charset = $target_charset;
}
function __destruct()
{
$this->clear();
}
// load html from string
function load($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
global $debug_object;
// prepare
$this->prepare($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText);
// strip out comments
$this->remove_noise("'<!--(.*?)-->'is");
// strip out cdata
$this->remove_noise("'<!\[CDATA\[(.*?)\]\]>'is", true);
// Per sourceforge http://sourceforge.net/tracker/?func=detail&aid=2949097&group_id=218559&atid=1044037
// Script tags removal now preceeds style tag removal.
// strip out <script> tags
$this->remove_noise("'<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>'is");
$this->remove_noise("'<\s*script\s*>(.*?)<\s*/\s*script\s*>'is");
// strip out <style> tags
$this->remove_noise("'<\s*style[^>]*[^/]>(.*?)<\s*/\s*style\s*>'is");
$this->remove_noise("'<\s*style\s*>(.*?)<\s*/\s*style\s*>'is");
// strip out preformatted tags
$this->remove_noise("'<\s*(?:code)[^>]*>(.*?)<\s*/\s*(?:code)\s*>'is");
// strip out server side scripts
$this->remove_noise("'(<\?)(.*?)(\?>)'s", true);
// strip smarty scripts
$this->remove_noise("'(\{\w)(.*?)(\})'s", true);
// parsing
while ($this->parse());
// end
$this->root->_[HDOM_INFO_END] = $this->cursor;
$this->parse_charset();
// make load function chainable
return $this;
}
// load html from file
function load_file()
{
$args = func_get_args();
$this->load(call_user_func_array('file_get_contents', $args), true);
// Throw an error if we can't properly load the dom.
if (($error=error_get_last())!==null) {
$this->clear();
return false;
}
}
// set callback function
function set_callback($function_name)
{
$this->callback = $function_name;
}
// remove callback function
function remove_callback()
{
$this->callback = null;
}
// save dom as string
function save($filepath='')
{
$ret = $this->root->innertext();
if ($filepath!=='') file_put_contents($filepath, $ret, LOCK_EX);
return $ret;
}
// find dom node by css selector
// Paperg - allow us to specify that we want case insensitive testing of the value of the selector.
function find($selector, $idx=null, $lowercase=false)
{
return $this->root->find($selector, $idx, $lowercase);
}
// clean up memory due to php5 circular references memory leak...
function clear()
{
foreach ($this->nodes as $n) {$n->clear(); $n = null;}
// This add next line is documented in the sourceforge repository. 2977248 as a fix for ongoing memory leaks that occur even with the use of clear.
if (isset($this->children)) foreach ($this->children as $n) {$n->clear(); $n = null;}
if (isset($this->parent)) {$this->parent->clear(); unset($this->parent);}
if (isset($this->root)) {$this->root->clear(); unset($this->root);}
unset($this->doc);
unset($this->noise);
}
function dump($show_attr=true)
{
$this->root->dump($show_attr);
}
// prepare HTML data and init everything
protected function prepare($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
$this->clear();
// set the length of content before we do anything to it.
$this->size = strlen($str);
// Save the original size of the html that we got in. It might be useful to someone.
$this->original_size = $this->size;
//before we save the string as the doc... strip out the
's if we are told to.
if ($stripRN) {
$str = str_replace("
", " ", $str);
$str = str_replace("
", " ", $str);
// set the length of content since we have changed it.
$this->size = strlen($str);
}
$this->doc = $str;
$this->pos = 0;
$this->cursor = 1;
$this->noise = array();
$this->nodes = array();
$this->lowercase = $lowercase;
$this->default_br_text = $defaultBRText;
$this->default_span_text = $defaultSpanText;
$this->root = new simple_html_dom_node($this);
$this->root->tag = 'root';
$this->root->_[HDOM_INFO_BEGIN] = -1;
$this->root->nodetype = HDOM_TYPE_ROOT;
$this->parent = $this->root;
if ($this->size>0) $this->char = $this->doc[0];
}
// parse html content
protected function parse()
{
if (($s = $this->copy_until_char('<'))==='')
{
return $this->read_tag();
}
// text
$node = new simple_html_dom_node($this);
++$this->cursor;
$node->_[HDOM_INFO_TEXT] = $s;
$this->link_nodes($node, false);
return true;
}
// PAPERG - dkchou - added this to try to identify the character set of the page we have just parsed so we know better how to spit it out later.
// NOTE: IF you provide a routine called get_last_retrieve_url_contents_content_type which returns the CURLINFO_CONTENT_TYPE from the last curl_exec
// (or the content_type header from the last transfer), we will parse THAT, and if a charset is specified, we will use it over any other mechanism.
protected function parse_charset()
{
global $debug_object;
$charset = null;
if (function_exists('get_last_retrieve_url_contents_content_type'))
{
$contentTypeHeader = get_last_retrieve_url_contents_content_type();
$success = preg_match('/charset=(.+)/', $contentTypeHeader, $matches);
if ($success)
{
$charset = $matches[1];
if (is_object($debug_object)) {$debug_object->debugLog(2, 'header content-type found charset of: ' . $charset);}
}
}
if (empty($charset))
{
$el = $this->root->find('meta[http-equiv=Content-Type]',0);
if (!empty($el))
{
$fullvalue = $el->content;
if (is_object($debug_object)) {$debug_object->debugLog(2, 'meta content-type tag found' . $fullvalue);}
if (!empty($fullvalue))
{
$success = preg_match('/charset=(.+)/', $fullvalue, $matches);
if ($success)
{
$charset = $matches[1];
}
else
{
// If there is a meta tag, and they don't specify the character set, research says that it's typically ISO-8859-1
if (is_object($debug_object)) {$debug_object->debugLog(2, 'meta content-type tag couldn\'t be parsed. using iso-8859 default.');}
$charset = 'ISO-8859-1';
}
}
}
}
// If we couldn't find a charset above, then lets try to detect one based on the text we got...
if (empty($charset))
{
// Have php try to detect the encoding from the text given to us.
$charset = mb_detect_encoding($this->root->plaintext . "ascii", $encoding_list = array( "UTF-8", "CP1252" ) );
if (is_object($debug_object)) {$debug_object->debugLog(2, 'mb_detect found: ' . $charset);}
// and if this doesn't work... then we need to just wrongheadedly assume it's UTF-8 so that we can move on - cause this will usually give us most of what we need...
if ($charset === false)
{
if (is_object($debug_object)) {$debug_object->debugLog(2, 'since mb_detect failed - using default of utf-8');}
$charset = 'UTF-8';
}
}
// Since CP1252 is a superset, if we get one of it's subsets, we want it instead.
if ((strtolower($charset) == strtolower('ISO-8859-1')) || (strtolower($charset) == strtolower('Latin1')) || (strtolower($charset) == strtolower('Latin-1')))
{
if (is_object($debug_object)) {$debug_object->debugLog(2, 'replacing ' . $charset . ' with CP1252 as its a superset');}
$charset = 'CP1252';
}
if (is_object($debug_object)) {$debug_object->debugLog(1, 'EXIT - ' . $charset);}
return $this->_charset = $charset;
}
// read tag info
protected function read_tag()
{
if ($this->char!=='<')
{
$this->root->_[HDOM_INFO_END] = $this->cursor;
return false;
}
$begin_tag_pos = $this->pos;
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
// end tag
if ($this->char==='/')
{
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
// This represents the change in the simple_html_dom trunk from revision 180 to 181.
// $this->skip($this->token_blank_t);
$this->skip($this->token_blank);
$tag = $this->copy_until_char('>');
// skip attributes in end tag
if (($pos = strpos($tag, ' '))!==false)
$tag = substr($tag, 0, $pos);
$parent_lower = strtolower($this->parent->tag);
$tag_lower = strtolower($tag);
if ($parent_lower!==$tag_lower)
{
if (isset($this->optional_closing_tags[$parent_lower]) && isset($this->block_tags[$tag_lower]))
{
$this->parent->_[HDOM_INFO_END] = 0;
$org_parent = $this->parent;
while (($this->parent->parent) && strtolower($this->parent->tag)!==$tag_lower)
$this->parent = $this->parent->parent;
if (strtolower($this->parent->tag)!==$tag_lower) {
$this->parent = $org_parent; // restore origonal parent
if ($this->parent->parent) $this->parent = $this->parent->parent;
$this->parent->_[HDOM_INFO_END] = $this->cursor;
return $this->as_text_node($tag);
}
}
else if (($this->parent->parent) && isset($this->block_tags[$tag_lower]))
{
$this->parent->_[HDOM_INFO_END] = 0;
$org_parent = $this->parent;
while (($this->parent->parent) && strtolower($this->parent->tag)!==$tag_lower)
$this->parent = $this->parent->parent;
if (strtolower($this->parent->tag)!==$tag_lower)
{
$this->parent = $org_parent; // restore origonal parent
$this->parent->_[HDOM_INFO_END] = $this->cursor;
return $this->as_text_node($tag);
}
}
else if (($this->parent->parent) && strtolower($this->parent->parent->tag)===$tag_lower)
{
$this->parent->_[HDOM_INFO_END] = 0;
$this->parent = $this->parent->parent;
}
else
return $this->as_text_node($tag);
}
$this->parent->_[HDOM_INFO_END] = $this->cursor;
if ($this->parent->parent) $this->parent = $this->parent->parent;
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
return true;
}
$node = new simple_html_dom_node($this);
$node->_[HDOM_INFO_BEGIN] = $this->cursor;
++$this->cursor;
$tag = $this->copy_until($this->token_slash);
$node->tag_start = $begin_tag_pos;
// doctype, cdata & comments...
if (isset($tag[0]) && $tag[0]==='!') {
$node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until_char('>');
if (isset($tag[2]) && $tag[1]==='-' && $tag[2]==='-') {
$node->nodetype = HDOM_TYPE_COMMENT;
$node->tag = 'comment';
} else {
$node->nodetype = HDOM_TYPE_UNKNOWN;
$node->tag = 'unknown';
}
if ($this->char==='>') $node->_[HDOM_INFO_TEXT].='>';
$this->link_nodes($node, true);
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
return true;
}
// text
if ($pos=strpos($tag, '<')!==false) {
$tag = '<' . substr($tag, 0, -1);
$node->_[HDOM_INFO_TEXT] = $tag;
$this->link_nodes($node, false);
$this->char = $this->doc[--$this->pos]; // prev
return true;
}
if (!preg_match("/^[\w-:]+$/", $tag)) {
$node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until('<>');
if ($this->char==='<') {
$this->link_nodes($node, false);
return true;
}
if ($this->char==='>') $node->_[HDOM_INFO_TEXT].='>';
$this->link_nodes($node, false);
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
return true;
}
// begin tag
$node->nodetype = HDOM_TYPE_ELEMENT;
$tag_lower = strtolower($tag);
$node->tag = ($this->lowercase) ? $tag_lower : $tag;
// handle optional closing tags
if (isset($this->optional_closing_tags[$tag_lower]) )
{
while (isset($this->optional_closing_tags[$tag_lower][strtolower($this->parent->tag)]))
{
$this->parent->_[HDOM_INFO_END] = 0;
$this->parent = $this->parent->parent;
}
$node->parent = $this->parent;
}
$guard = 0; // prevent infinity loop
$space = array($this->copy_skip($this->token_blank), '', '');
// attributes
do
{
if ($this->char!==null && $space[0]==='')
{
break;
}
$name = $this->copy_until($this->token_equal);
if ($guard===$this->pos)
{
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
continue;
}
$guard = $this->pos;
// handle endless '<'
if ($this->pos>=$this->size-1 && $this->char!=='>') {
$node->nodetype = HDOM_TYPE_TEXT;
$node->_[HDOM_INFO_END] = 0;
$node->_[HDOM_INFO_TEXT] = '<'.$tag . $space[0] . $name;
$node->tag = 'text';
$this->link_nodes($node, false);
return true;
}
// handle mismatch '<'
if ($this->doc[$this->pos-1]=='<') {
$node->nodetype = HDOM_TYPE_TEXT;
$node->tag = 'text';
$node->attr = array();
$node->_[HDOM_INFO_END] = 0;
$node->_[HDOM_INFO_TEXT] = substr($this->doc, $begin_tag_pos, $this->pos-$begin_tag_pos-1);
$this->pos -= 2;
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
$this->link_nodes($node, false);
return true;
}
if ($name!=='/' && $name!=='') {
$space[1] = $this->copy_skip($this->token_blank);
$name = $this->restore_noise($name);
if ($this->lowercase) $name = strtolower($name);
if ($this->char==='=') {
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
$this->parse_attr($node, $name, $space);
}
else {
//no value attr: nowrap, checked selected...
$node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO;
$node->attr[$name] = true;
if ($this->char!='>') $this->char = $this->doc[--$this->pos]; // prev
}
$node->_[HDOM_INFO_SPACE][] = $space;
$space = array($this->copy_skip($this->token_blank), '', '');
}
else
break;
} while ($this->char!=='>' && $this->char!=='/');
$this->link_nodes($node, true);
$node->_[HDOM_INFO_ENDSPACE] = $space[0];
// check self closing
if ($this->copy_until_char_escape('>')==='/')
{
$node->_[HDOM_INFO_ENDSPACE] .= '/';
$node->_[HDOM_INFO_END] = 0;
}
else
{
// reset parent
if (!isset($this->self_closing_tags[strtolower($node->tag)])) $this->parent = $node;
}
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
// If it's a BR tag, we need to set it's text to the default text.
// This way when we see it in plaintext, we can generate formatting that the user wants.
// since a br tag never has sub nodes, this works well.
if ($node->tag == "br")
{
$node->_[HDOM_INFO_INNER] = $this->default_br_text;
}
return true;
}
// parse attributes
protected function parse_attr($node, $name, &$space)
{
// Per sourceforge: http://sourceforge.net/tracker/?func=detail&aid=3061408&group_id=218559&atid=1044037
// If the attribute is already defined inside a tag, only pay atetntion to the first one as opposed to the last one.
if (isset($node->attr[$name]))
{
return;
}
$space[2] = $this->copy_skip($this->token_blank);
switch ($this->char) {
case '"':
$node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE;
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
$node->attr[$name] = $this->restore_noise($this->copy_until_char_escape('"'));
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
break;
case '\'':
$node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_SINGLE;
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
$node->attr[$name] = $this->restore_noise($this->copy_until_char_escape('\''));
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
break;
default:
$node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO;
$node->attr[$name] = $this->restore_noise($this->copy_until($this->token_attr));
}
// PaperG: Attributes should not have
or
in them, that counts as html whitespace.
$node->attr[$name] = str_replace("
", "", $node->attr[$name]);
$node->attr[$name] = str_replace("
", "", $node->attr[$name]);
// PaperG: If this is a "class" selector, lets get rid of the preceeding and trailing space since some people leave it in the multi class case.
if ($name == "class") {
$node->attr[$name] = trim($node->attr[$name]);
}
}
// link node's parent
protected function link_nodes(&$node, $is_child)
{
$node->parent = $this->parent;
$this->parent->nodes[] = $node;
if ($is_child)
{
$this->parent->children[] = $node;
}
}
// as a text node
protected function as_text_node($tag)
{
$node = new simple_html_dom_node($this);
++$this->cursor;
$node->_[HDOM_INFO_TEXT] = '</' . $tag . '>';
$this->link_nodes($node, false);
$this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
return true;
}
protected function skip($chars)
{
$this->pos += strspn($this->doc, $chars, $this->pos);
$this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
}
protected function copy_skip($chars)
{
$pos = $this->pos;
$len = strspn($this->doc, $chars, $pos);
$this->pos += $len;
$this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
if ($len===0) return '';
return substr($this->doc, $pos, $len);
}
protected function copy_until($chars)
{
$pos = $this->pos;
$len = strcspn($this->doc, $chars, $pos);
$this->pos += $len;
$this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next
return substr($this->doc, $pos, $len);
}
protected function copy_until_char($char)
{
if ($this->char===null) return '';
if (($pos = strpos($this->doc, $char, $this->pos))===false) {
$ret = substr($this->doc, $this->pos, $this->size-$this->pos);
$this->char = null;
$this->pos = $this->size;
return $ret;
}
if ($pos===$this->pos) return '';
$pos_old = $this->pos;
$this->char = $this->doc[$pos];
$this->pos = $pos;
return substr($this->doc, $pos_old, $pos-$pos_old);
}
protected function copy_until_char_escape($char)
{
if ($this->char===null) return '';
$start = $this->pos;
while (1)
{
if (($pos = strpos($this->doc, $char, $start))===false)
{
$ret = substr($this->doc, $this->pos, $this->size-$this->pos);
$this->char = null;
$this->pos = $this->size;
return $ret;
}
if ($pos===$this->pos) return '';
if ($this->doc[$pos-1]==='\') {
$start = $pos+1;
continue;
}
$pos_old = $this->pos;
$this->char = $this->doc[$pos];
$this->pos = $pos;
return substr($this->doc, $pos_old, $pos-$pos_old);
}
}
// remove noise from html content
// save the noise in the $this->noise array.
protected function remove_noise($pattern, $remove_tag=false)
{
global $debug_object;
if (is_object($debug_object)) { $debug_object->debugLogEntry(1); }
$count = preg_match_all($pattern, $this->doc, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE);
for ($i=$count-1; $i>-1; --$i)
{
$key = '___noise___'.sprintf('% 5d', count($this->noise)+1000);
if (is_object($debug_object)) { $debug_object->debugLog(2, 'key is: ' . $key); }
$idx = ($remove_tag) ? 0 : 1;
$this->noise[$key] = $matches[$i][$idx][0];
$this->doc = substr_replace($this->doc, $key, $matches[$i][$idx][1], strlen($matches[$i][$idx][0]));
}
// reset the length of content
$this->size = strlen($this->doc);
if ($this->size>0)
{
$this->char = $this->doc[0];
}
}
// restore noise to html content
function restore_noise($text)
{
global $debug_object;
if (is_object($debug_object)) { $debug_object->debugLogEntry(1); }
while (($pos=strpos($text, '___noise___'))!==false)
{
// Sometimes there is a broken piece of markup, and we don't GET the pos+11 etc... token which indicates a problem outside of us...
if (strlen($text) > $pos+15)
{
$key = '___noise___'.$text[$pos+11].$text[$pos+12].$text[$pos+13].$text[$pos+14].$text[$pos+15];
if (is_object($debug_object)) { $debug_object->debugLog(2, 'located key of: ' . $key); }
if (isset($this->noise[$key]))
{
$text = substr($text, 0, $pos).$this->noise[$key].substr($text, $pos+16);
}
else
{
// do this to prevent an infinite loop.
$text = substr($text, 0, $pos).'UNDEFINED NOISE FOR KEY: '.$key . substr($text, $pos+16);
}
}
else
{
// There is no valid key being given back to us... We must get rid of the ___noise___ or we will have a problem.
$text = substr($text, 0, $pos).'NO NUMERIC NOISE KEY' . substr($text, $pos+11);
}
}
return $text;
}
// Sometimes we NEED one of the noise elements.
function search_noise($text)
{
global $debug_object;
if (is_object($debug_object)) { $debug_object->debugLogEntry(1); }
foreach($this->noise as $noiseElement)
{
if (strpos($noiseElement, $text)!==false)
{
return $noiseElement;
}
}
}
function __toString()
{
return $this->root->innertext();
}
function __get($name)
{
switch ($name)
{
case 'outertext':
return $this->root->innertext();
case 'innertext':
return $this->root->innertext();
case 'plaintext':
return $this->root->text();
case 'charset':
return $this->_charset;
case 'target_charset':
return $this->_target_charset;
}
}
// camel naming conventions
function childNodes($idx=-1) {return $this->root->childNodes($idx);}
function firstChild() {return $this->root->first_child();}
function lastChild() {return $this->root->last_child();}
function createElement($name, $value=null) {return @str_get_html("<$name>$value</$name>")->first_child();}
function createTextNode($value) {return @end(str_get_html($value)->nodes);}
function getElementById($id) {return $this->find("#$id", 0);}
function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);}
function getElementByTagName($name) {return $this->find($name, 0);}
function getElementsByTagName($name, $idx=-1) {return $this->find($name, $idx);}
function loadFile() {$args = func_get_args();$this->load_file($args);}
}
Did this file decode correctly?
Original Code
<?php // This file is protected by copyright law and provided under license. Reverse engineering of this file is strictly prohibited.
$OOO0O0O00=__FILE__;$O00O00O00=__LINE__;$OO00O0000=72708;eval((base64_decode('JE8wMDBPME8wMD1mb3BlbigkT09PME8wTzAwLCdyYicpO3doaWxlKC0tJE8wME8wME8wMClmZ2V0cygkTzAwME8wTzAwLDEwMjQpO2ZnZXRzKCRPMDAwTzBPMDAsNDA5Nik7JE9PMDBPMDBPMD0oYmFzZTY0X2RlY29kZShzdHJ0cihmcmVhZCgkTzAwME8wTzAwLDM3MiksJ0lIVERYVktRNVJhM3Y4RTlzZWNmTnp1aVdvWWxTWjZ5ZDErYkN3TXFKT2cwL2hGRzRydFA3bkEycGp4TFVCa209JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));return;?>
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TdCG3tHsWiHwSMSd3cHnSANdl2zt5KB2l+Hhou8JWujOSA7doMBt5KZwZQeOlMSdZK1w5K8GlqewlqeP5KVP5QZw5QZ1lqsdZKUdWABFZQRGlTH7YKNdZKwhouBnZTp8TdCG3teblAj7ouj7StIB5QRwZQROoiowi2ztlVBblAj7ouj7StdCZiR/af/8TdwOo+IJoun4ZQCJRK8GlqewlqePacHUyTHPZQR/oupJRK8GlqewlqePacIk5XnHuVBKcNrVin8RuCNODsJR647aTswtoienSMpdoMV/SANLDsJRys7aTcUG5VeJocHPou8GlMsdSKVtWunwZKzt5K81l+HMl2RbocH7YKNdSAz/ou87l2RP5QeG5KV/lTH+ocH/l2ZwSM81SANFDsJRRKeGlc7klKB1oTdCWABFZKzFZQv/5Te/l2ZwSM81SAN/5TePZQROSVREaf/8TdwtoienSMpdRKeGlf/8Tq78Td7a3tUdoAz75K17lu4doKBh5KotlA7dS2etYujqDsOMZujbZKwGl+HPZQRyoAz7iA17lu4JRQ87S+4dRKrGZAztWAVPofn7Sqzw3TICoMBtWAzNWuZPsArGSAzC9ietZuN/5Te7WiRqoieyWA11Sq8wZTIB5XeVeCVzfVeyzXVce7zNi785szRfezs/5TePZQROSVRE9ietZuN/5TeCouo1Zur7swRNoi179NeVeCVzfVeyswRyzXzWzT4dRKewoMVnlQefSKVFzKzpZDnXeNoHzNrNin8ssNjyzXzWzTC8Tq/8TdCCoKBh5D7dlMz25Q8OliH/ozBJZKn/iAeGlc1FZur/3TIClKB2oiRbWi8w3TICoMBtWAzNWuZPsArGSAzC3TICZKVtoAz7iA8JWiRPois/5TePZQROSVRE3TICoKzMWiz/ZXRczKzpZT4dRKewoMVnlQefSKVFzKzpZTCLDsJRYuWdaKzhSQejaTePZQ5O5QrU5Q87SMrwl+dCS2etacIk5XnHuVBKcNrVin8RuCNODsJR647aTsCCoKBh3fjblKz1S+dOE47aTswtoienSMpdoMV/SANLDsJRys7aTceClA7h9MrGWusJRQ87S+4dRKrGZAztWAVPoc4dRQ87SMw4NCpOE47aTiRwZQztl+ICoKBhE47ays7aDsJG3tHCZun45K17lu4doKBh5QetouN8TMon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
Function Calls
fgets | 2 |
fopen | 1 |
fread | 2 |
strtr | 2 |
define | 1 |
fclose | 1 |
ereg_replace | 1 |
base64_decode | 3 |
Stats
MD5 | 444c9fcb9d927ab81c5b5f496c899c4b |
Eval Count | 3 |
Decode Time | 417 ms |