Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-conte.../plugins/embedpre.../EmbedPre...
File: simple_html_dom.php
// The start tag cannot contain another start tag, if so add as text
[2000] Fix | Delete
// i.e. "<<html>"
[2001] Fix | Delete
if ($pos = strpos($tag, '<') !== false) {
[2002] Fix | Delete
$tag = '<' . substr($tag, 0, -1);
[2003] Fix | Delete
$node->_[HDOM_INFO_TEXT] = $tag;
[2004] Fix | Delete
$this->link_nodes($node, false);
[2005] Fix | Delete
$this->char = $this->doc[--$this->pos]; // prev
[2006] Fix | Delete
return true;
[2007] Fix | Delete
}
[2008] Fix | Delete
[2009] Fix | Delete
// Handle invalid tag names (i.e. "<html#doc>")
[2010] Fix | Delete
if (!preg_match('/^\w[\w:-]*$/', $tag)) {
[2011] Fix | Delete
$node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until('<>');
[2012] Fix | Delete
[2013] Fix | Delete
// Next char is the beginning of a new tag, don't touch it.
[2014] Fix | Delete
if ($this->char === '<') {
[2015] Fix | Delete
$this->link_nodes($node, false);
[2016] Fix | Delete
return true;
[2017] Fix | Delete
}
[2018] Fix | Delete
[2019] Fix | Delete
// Next char closes current tag, add and be done with it.
[2020] Fix | Delete
if ($this->char === '>') { $node->_[HDOM_INFO_TEXT] .= '>'; }
[2021] Fix | Delete
$this->link_nodes($node, false);
[2022] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2023] Fix | Delete
return true;
[2024] Fix | Delete
}
[2025] Fix | Delete
[2026] Fix | Delete
// begin tag, add new node
[2027] Fix | Delete
$node->nodetype = HDOM_TYPE_ELEMENT;
[2028] Fix | Delete
$tag_lower = strtolower($tag);
[2029] Fix | Delete
$node->tag = ($this->lowercase) ? $tag_lower : $tag;
[2030] Fix | Delete
[2031] Fix | Delete
// handle optional closing tags
[2032] Fix | Delete
if (isset($this->optional_closing_tags[$tag_lower])) {
[2033] Fix | Delete
// Traverse ancestors to close all optional closing tags
[2034] Fix | Delete
while (isset($this->optional_closing_tags[$tag_lower][strtolower($this->parent->tag)])) {
[2035] Fix | Delete
$this->parent->_[HDOM_INFO_END] = 0;
[2036] Fix | Delete
$this->parent = $this->parent->parent;
[2037] Fix | Delete
}
[2038] Fix | Delete
$node->parent = $this->parent;
[2039] Fix | Delete
}
[2040] Fix | Delete
[2041] Fix | Delete
$guard = 0; // prevent infinity loop
[2042] Fix | Delete
[2043] Fix | Delete
// [0] Space between tag and first attribute
[2044] Fix | Delete
$space = array($this->copy_skip($this->token_blank), '', '');
[2045] Fix | Delete
[2046] Fix | Delete
// attributes
[2047] Fix | Delete
do {
[2048] Fix | Delete
// Everything until the first equal sign should be the attribute name
[2049] Fix | Delete
$name = $this->copy_until($this->token_equal);
[2050] Fix | Delete
[2051] Fix | Delete
if ($name === '' && $this->char !== null && $space[0] === '') {
[2052] Fix | Delete
break;
[2053] Fix | Delete
}
[2054] Fix | Delete
[2055] Fix | Delete
if ($guard === $this->pos) { // Escape infinite loop
[2056] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2057] Fix | Delete
continue;
[2058] Fix | Delete
}
[2059] Fix | Delete
[2060] Fix | Delete
$guard = $this->pos;
[2061] Fix | Delete
[2062] Fix | Delete
// handle endless '<'
[2063] Fix | Delete
// Out of bounds before the tag ended
[2064] Fix | Delete
if ($this->pos >= $this->size - 1 && $this->char !== '>') {
[2065] Fix | Delete
$node->nodetype = HDOM_TYPE_TEXT;
[2066] Fix | Delete
$node->_[HDOM_INFO_END] = 0;
[2067] Fix | Delete
$node->_[HDOM_INFO_TEXT] = '<' . $tag . $space[0] . $name;
[2068] Fix | Delete
$node->tag = 'text';
[2069] Fix | Delete
$this->link_nodes($node, false);
[2070] Fix | Delete
return true;
[2071] Fix | Delete
}
[2072] Fix | Delete
[2073] Fix | Delete
// handle mismatch '<'
[2074] Fix | Delete
// Attributes cannot start after opening tag
[2075] Fix | Delete
if ($this->doc[$this->pos - 1] == '<') {
[2076] Fix | Delete
$node->nodetype = HDOM_TYPE_TEXT;
[2077] Fix | Delete
$node->tag = 'text';
[2078] Fix | Delete
$node->attr = array();
[2079] Fix | Delete
$node->_[HDOM_INFO_END] = 0;
[2080] Fix | Delete
$node->_[HDOM_INFO_TEXT] = substr(
[2081] Fix | Delete
$this->doc,
[2082] Fix | Delete
$begin_tag_pos,
[2083] Fix | Delete
$this->pos - $begin_tag_pos - 1
[2084] Fix | Delete
);
[2085] Fix | Delete
$this->pos -= 2;
[2086] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2087] Fix | Delete
$this->link_nodes($node, false);
[2088] Fix | Delete
return true;
[2089] Fix | Delete
}
[2090] Fix | Delete
[2091] Fix | Delete
if ($name !== '/' && $name !== '') { // this is a attribute name
[2092] Fix | Delete
// [1] Whitespace after attribute name
[2093] Fix | Delete
$space[1] = $this->copy_skip($this->token_blank);
[2094] Fix | Delete
[2095] Fix | Delete
$name = $this->restore_noise($name); // might be a noisy name
[2096] Fix | Delete
[2097] Fix | Delete
if ($this->lowercase) { $name = strtolower($name); }
[2098] Fix | Delete
[2099] Fix | Delete
if ($this->char === '=') { // attribute with value
[2100] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2101] Fix | Delete
$this->parse_attr($node, $name, $space); // get attribute value
[2102] Fix | Delete
} else {
[2103] Fix | Delete
//no value attr: nowrap, checked selected...
[2104] Fix | Delete
$node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO;
[2105] Fix | Delete
$node->attr[$name] = true;
[2106] Fix | Delete
if ($this->char != '>') { $this->char = $this->doc[--$this->pos]; } // prev
[2107] Fix | Delete
}
[2108] Fix | Delete
[2109] Fix | Delete
$node->_[HDOM_INFO_SPACE][] = $space;
[2110] Fix | Delete
[2111] Fix | Delete
// prepare for next attribute
[2112] Fix | Delete
$space = array(
[2113] Fix | Delete
$this->copy_skip($this->token_blank),
[2114] Fix | Delete
'',
[2115] Fix | Delete
''
[2116] Fix | Delete
);
[2117] Fix | Delete
} else { // no more attributes
[2118] Fix | Delete
break;
[2119] Fix | Delete
}
[2120] Fix | Delete
} while ($this->char !== '>' && $this->char !== '/'); // go until the tag ended
[2121] Fix | Delete
[2122] Fix | Delete
$this->link_nodes($node, true);
[2123] Fix | Delete
$node->_[HDOM_INFO_ENDSPACE] = $space[0];
[2124] Fix | Delete
[2125] Fix | Delete
// handle empty tags (i.e. "<div/>")
[2126] Fix | Delete
if ($this->copy_until_char('>') === '/') {
[2127] Fix | Delete
$node->_[HDOM_INFO_ENDSPACE] .= '/';
[2128] Fix | Delete
$node->_[HDOM_INFO_END] = 0;
[2129] Fix | Delete
} else {
[2130] Fix | Delete
// reset parent
[2131] Fix | Delete
if (!isset($this->self_closing_tags[strtolower($node->tag)])) {
[2132] Fix | Delete
$this->parent = $node;
[2133] Fix | Delete
}
[2134] Fix | Delete
}
[2135] Fix | Delete
[2136] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2137] Fix | Delete
[2138] Fix | Delete
// If it's a BR tag, we need to set it's text to the default text.
[2139] Fix | Delete
// This way when we see it in plaintext, we can generate formatting that the user wants.
[2140] Fix | Delete
// since a br tag never has sub nodes, this works well.
[2141] Fix | Delete
if ($node->tag === 'br') {
[2142] Fix | Delete
$node->_[HDOM_INFO_INNER] = $this->default_br_text;
[2143] Fix | Delete
}
[2144] Fix | Delete
[2145] Fix | Delete
return true;
[2146] Fix | Delete
}
[2147] Fix | Delete
[2148] Fix | Delete
protected function parse_attr($node, $name, &$space)
[2149] Fix | Delete
{
[2150] Fix | Delete
$is_duplicate = isset($node->attr[$name]);
[2151] Fix | Delete
[2152] Fix | Delete
if (!$is_duplicate) // Copy whitespace between "=" and value
[2153] Fix | Delete
$space[2] = $this->copy_skip($this->token_blank);
[2154] Fix | Delete
[2155] Fix | Delete
switch ($this->char) {
[2156] Fix | Delete
case '"':
[2157] Fix | Delete
$quote_type = HDOM_QUOTE_DOUBLE;
[2158] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2159] Fix | Delete
$value = $this->copy_until_char('"');
[2160] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2161] Fix | Delete
break;
[2162] Fix | Delete
case '\'':
[2163] Fix | Delete
$quote_type = HDOM_QUOTE_SINGLE;
[2164] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2165] Fix | Delete
$value = $this->copy_until_char('\'');
[2166] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2167] Fix | Delete
break;
[2168] Fix | Delete
default:
[2169] Fix | Delete
$quote_type = HDOM_QUOTE_NO;
[2170] Fix | Delete
$value = $this->copy_until($this->token_attr);
[2171] Fix | Delete
}
[2172] Fix | Delete
[2173] Fix | Delete
$value = $this->restore_noise($value);
[2174] Fix | Delete
[2175] Fix | Delete
// PaperG: Attributes should not have \r or \n in them, that counts as
[2176] Fix | Delete
// html whitespace.
[2177] Fix | Delete
$value = str_replace("\r", '', $value);
[2178] Fix | Delete
$value = str_replace("\n", '', $value);
[2179] Fix | Delete
[2180] Fix | Delete
// PaperG: If this is a "class" selector, lets get rid of the preceeding
[2181] Fix | Delete
// and trailing space since some people leave it in the multi class case.
[2182] Fix | Delete
if ($name === 'class') {
[2183] Fix | Delete
$value = trim($value);
[2184] Fix | Delete
}
[2185] Fix | Delete
[2186] Fix | Delete
if (!$is_duplicate) {
[2187] Fix | Delete
$node->_[HDOM_INFO_QUOTE][] = $quote_type;
[2188] Fix | Delete
$node->attr[$name] = $value;
[2189] Fix | Delete
}
[2190] Fix | Delete
}
[2191] Fix | Delete
[2192] Fix | Delete
protected function link_nodes(&$node, $is_child)
[2193] Fix | Delete
{
[2194] Fix | Delete
$node->parent = $this->parent;
[2195] Fix | Delete
$this->parent->nodes[] = $node;
[2196] Fix | Delete
if ($is_child) {
[2197] Fix | Delete
$this->parent->children[] = $node;
[2198] Fix | Delete
}
[2199] Fix | Delete
}
[2200] Fix | Delete
[2201] Fix | Delete
protected function as_text_node($tag)
[2202] Fix | Delete
{
[2203] Fix | Delete
$node = new simple_html_dom_node($this);
[2204] Fix | Delete
++$this->cursor;
[2205] Fix | Delete
$node->_[HDOM_INFO_TEXT] = '</' . $tag . '>';
[2206] Fix | Delete
$this->link_nodes($node, false);
[2207] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2208] Fix | Delete
return true;
[2209] Fix | Delete
}
[2210] Fix | Delete
[2211] Fix | Delete
protected function skip($chars)
[2212] Fix | Delete
{
[2213] Fix | Delete
$this->pos += strspn($this->doc, $chars, $this->pos);
[2214] Fix | Delete
$this->char = ($this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2215] Fix | Delete
}
[2216] Fix | Delete
[2217] Fix | Delete
protected function copy_skip($chars)
[2218] Fix | Delete
{
[2219] Fix | Delete
$pos = $this->pos;
[2220] Fix | Delete
$len = strspn($this->doc, $chars, $pos);
[2221] Fix | Delete
$this->pos += $len;
[2222] Fix | Delete
$this->char = ($this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2223] Fix | Delete
if ($len === 0) { return ''; }
[2224] Fix | Delete
return substr($this->doc, $pos, $len);
[2225] Fix | Delete
}
[2226] Fix | Delete
[2227] Fix | Delete
protected function copy_until($chars)
[2228] Fix | Delete
{
[2229] Fix | Delete
$pos = $this->pos;
[2230] Fix | Delete
$len = strcspn($this->doc, $chars, $pos);
[2231] Fix | Delete
$this->pos += $len;
[2232] Fix | Delete
$this->char = ($this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[2233] Fix | Delete
return substr($this->doc, $pos, $len);
[2234] Fix | Delete
}
[2235] Fix | Delete
[2236] Fix | Delete
protected function copy_until_char($char)
[2237] Fix | Delete
{
[2238] Fix | Delete
if ($this->char === null) { return ''; }
[2239] Fix | Delete
[2240] Fix | Delete
if (($pos = strpos($this->doc, $char, $this->pos)) === false) {
[2241] Fix | Delete
$ret = substr($this->doc, $this->pos, $this->size - $this->pos);
[2242] Fix | Delete
$this->char = null;
[2243] Fix | Delete
$this->pos = $this->size;
[2244] Fix | Delete
return $ret;
[2245] Fix | Delete
}
[2246] Fix | Delete
[2247] Fix | Delete
if ($pos === $this->pos) { return ''; }
[2248] Fix | Delete
[2249] Fix | Delete
$pos_old = $this->pos;
[2250] Fix | Delete
$this->char = $this->doc[$pos];
[2251] Fix | Delete
$this->pos = $pos;
[2252] Fix | Delete
return substr($this->doc, $pos_old, $pos - $pos_old);
[2253] Fix | Delete
}
[2254] Fix | Delete
[2255] Fix | Delete
protected function remove_noise($pattern, $remove_tag = false)
[2256] Fix | Delete
{
[2257] Fix | Delete
global $debug_object;
[2258] Fix | Delete
if (is_object($debug_object)) { $debug_object->debug_log_entry(1); }
[2259] Fix | Delete
[2260] Fix | Delete
$count = preg_match_all(
[2261] Fix | Delete
$pattern,
[2262] Fix | Delete
$this->doc,
[2263] Fix | Delete
$matches,
[2264] Fix | Delete
PREG_SET_ORDER | PREG_OFFSET_CAPTURE
[2265] Fix | Delete
);
[2266] Fix | Delete
[2267] Fix | Delete
for ($i = $count - 1; $i > -1; --$i) {
[2268] Fix | Delete
$key = '___noise___' . sprintf('% 5d', count($this->noise) + 1000);
[2269] Fix | Delete
[2270] Fix | Delete
if (is_object($debug_object)) {
[2271] Fix | Delete
$debug_object->debug_log(2, 'key is: ' . $key);
[2272] Fix | Delete
}
[2273] Fix | Delete
[2274] Fix | Delete
$idx = ($remove_tag) ? 0 : 1; // 0 = entire match, 1 = submatch
[2275] Fix | Delete
$this->noise[$key] = $matches[$i][$idx][0];
[2276] Fix | Delete
$this->doc = substr_replace($this->doc, $key, $matches[$i][$idx][1], strlen($matches[$i][$idx][0]));
[2277] Fix | Delete
}
[2278] Fix | Delete
[2279] Fix | Delete
// reset the length of content
[2280] Fix | Delete
$this->size = strlen($this->doc);
[2281] Fix | Delete
[2282] Fix | Delete
if ($this->size > 0) {
[2283] Fix | Delete
$this->char = $this->doc[0];
[2284] Fix | Delete
}
[2285] Fix | Delete
}
[2286] Fix | Delete
[2287] Fix | Delete
function restore_noise($text)
[2288] Fix | Delete
{
[2289] Fix | Delete
global $debug_object;
[2290] Fix | Delete
if (is_object($debug_object)) { $debug_object->debug_log_entry(1); }
[2291] Fix | Delete
[2292] Fix | Delete
while (($pos = strpos($text, '___noise___')) !== false) {
[2293] Fix | Delete
// Sometimes there is a broken piece of markup, and we don't GET the
[2294] Fix | Delete
// pos+11 etc... token which indicates a problem outside of us...
[2295] Fix | Delete
[2296] Fix | Delete
// todo: "___noise___1000" (or any number with four or more digits)
[2297] Fix | Delete
// in the DOM causes an infinite loop which could be utilized by
[2298] Fix | Delete
// malicious software
[2299] Fix | Delete
if (strlen($text) > $pos + 15) {
[2300] Fix | Delete
$key = '___noise___'
[2301] Fix | Delete
. $text[$pos + 11]
[2302] Fix | Delete
. $text[$pos + 12]
[2303] Fix | Delete
. $text[$pos + 13]
[2304] Fix | Delete
. $text[$pos + 14]
[2305] Fix | Delete
. $text[$pos + 15];
[2306] Fix | Delete
[2307] Fix | Delete
if (is_object($debug_object)) {
[2308] Fix | Delete
$debug_object->debug_log(2, 'located key of: ' . $key);
[2309] Fix | Delete
}
[2310] Fix | Delete
[2311] Fix | Delete
if (isset($this->noise[$key])) {
[2312] Fix | Delete
$text = substr($text, 0, $pos)
[2313] Fix | Delete
. $this->noise[$key]
[2314] Fix | Delete
. substr($text, $pos + 16);
[2315] Fix | Delete
} else {
[2316] Fix | Delete
// do this to prevent an infinite loop.
[2317] Fix | Delete
$text = substr($text, 0, $pos)
[2318] Fix | Delete
. 'UNDEFINED NOISE FOR KEY: '
[2319] Fix | Delete
. $key
[2320] Fix | Delete
. substr($text, $pos + 16);
[2321] Fix | Delete
}
[2322] Fix | Delete
} else {
[2323] Fix | Delete
// There is no valid key being given back to us... We must get
[2324] Fix | Delete
// rid of the ___noise___ or we will have a problem.
[2325] Fix | Delete
$text = substr($text, 0, $pos)
[2326] Fix | Delete
. 'NO NUMERIC NOISE KEY'
[2327] Fix | Delete
. substr($text, $pos + 11);
[2328] Fix | Delete
}
[2329] Fix | Delete
}
[2330] Fix | Delete
return $text;
[2331] Fix | Delete
}
[2332] Fix | Delete
[2333] Fix | Delete
function search_noise($text)
[2334] Fix | Delete
{
[2335] Fix | Delete
global $debug_object;
[2336] Fix | Delete
if (is_object($debug_object)) { $debug_object->debug_log_entry(1); }
[2337] Fix | Delete
[2338] Fix | Delete
foreach($this->noise as $noiseElement) {
[2339] Fix | Delete
if (strpos($noiseElement, $text) !== false) {
[2340] Fix | Delete
return $noiseElement;
[2341] Fix | Delete
}
[2342] Fix | Delete
}
[2343] Fix | Delete
}
[2344] Fix | Delete
[2345] Fix | Delete
function __toString()
[2346] Fix | Delete
{
[2347] Fix | Delete
return $this->root->innertext();
[2348] Fix | Delete
}
[2349] Fix | Delete
[2350] Fix | Delete
function __get($name)
[2351] Fix | Delete
{
[2352] Fix | Delete
switch ($name) {
[2353] Fix | Delete
case 'outertext':
[2354] Fix | Delete
return $this->root->innertext();
[2355] Fix | Delete
case 'innertext':
[2356] Fix | Delete
return $this->root->innertext();
[2357] Fix | Delete
case 'plaintext':
[2358] Fix | Delete
return $this->root->text();
[2359] Fix | Delete
case 'charset':
[2360] Fix | Delete
return $this->_charset;
[2361] Fix | Delete
case 'target_charset':
[2362] Fix | Delete
return $this->_target_charset;
[2363] Fix | Delete
}
[2364] Fix | Delete
}
[2365] Fix | Delete
[2366] Fix | Delete
function childNodes($idx = -1)
[2367] Fix | Delete
{
[2368] Fix | Delete
return $this->root->childNodes($idx);
[2369] Fix | Delete
}
[2370] Fix | Delete
[2371] Fix | Delete
function firstChild()
[2372] Fix | Delete
{
[2373] Fix | Delete
return $this->root->first_child();
[2374] Fix | Delete
}
[2375] Fix | Delete
[2376] Fix | Delete
function lastChild()
[2377] Fix | Delete
{
[2378] Fix | Delete
return $this->root->last_child();
[2379] Fix | Delete
}
[2380] Fix | Delete
[2381] Fix | Delete
function createElement($name, $value = null)
[2382] Fix | Delete
{
[2383] Fix | Delete
return @str_get_html("<$name>$value</$name>")->firstChild();
[2384] Fix | Delete
}
[2385] Fix | Delete
[2386] Fix | Delete
function createTextNode($value)
[2387] Fix | Delete
{
[2388] Fix | Delete
return @end(str_get_html($value)->nodes);
[2389] Fix | Delete
}
[2390] Fix | Delete
[2391] Fix | Delete
function getElementById($id)
[2392] Fix | Delete
{
[2393] Fix | Delete
return $this->find("#$id", 0);
[2394] Fix | Delete
}
[2395] Fix | Delete
[2396] Fix | Delete
function getElementsById($id, $idx = null)
[2397] Fix | Delete
{
[2398] Fix | Delete
return $this->find("#$id", $idx);
[2399] Fix | Delete
}
[2400] Fix | Delete
[2401] Fix | Delete
function getElementByTagName($name)
[2402] Fix | Delete
{
[2403] Fix | Delete
return $this->find($name, 0);
[2404] Fix | Delete
}
[2405] Fix | Delete
[2406] Fix | Delete
function getElementsByTagName($name, $idx = -1)
[2407] Fix | Delete
{
[2408] Fix | Delete
return $this->find($name, $idx);
[2409] Fix | Delete
}
[2410] Fix | Delete
[2411] Fix | Delete
function loadFile()
[2412] Fix | Delete
{
[2413] Fix | Delete
$args = func_get_args();
[2414] Fix | Delete
$this->load_file($args);
[2415] Fix | Delete
}
[2416] Fix | Delete
}
[2417] Fix | Delete
[2418] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function