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
'rp' => array('rp' => 1, 'rt' => 1),
[1500] Fix | Delete
'rt' => array('rp' => 1, 'rt' => 1),
[1501] Fix | Delete
'td' => array('td' => 1, 'th' => 1),
[1502] Fix | Delete
'th' => array('td' => 1, 'th' => 1),
[1503] Fix | Delete
'tr' => array('td' => 1, 'th' => 1, 'tr' => 1),
[1504] Fix | Delete
);
[1505] Fix | Delete
[1506] Fix | Delete
function __construct(
[1507] Fix | Delete
$str = null,
[1508] Fix | Delete
$lowercase = true,
[1509] Fix | Delete
$forceTagsClosed = true,
[1510] Fix | Delete
$target_charset = DEFAULT_TARGET_CHARSET,
[1511] Fix | Delete
$stripRN = true,
[1512] Fix | Delete
$defaultBRText = DEFAULT_BR_TEXT,
[1513] Fix | Delete
$defaultSpanText = DEFAULT_SPAN_TEXT,
[1514] Fix | Delete
$options = 0)
[1515] Fix | Delete
{
[1516] Fix | Delete
if ($str) {
[1517] Fix | Delete
if (preg_match('/^http:\/\//i', $str) || is_file($str)) {
[1518] Fix | Delete
$this->load_file($str);
[1519] Fix | Delete
} else {
[1520] Fix | Delete
$this->load(
[1521] Fix | Delete
$str,
[1522] Fix | Delete
$lowercase,
[1523] Fix | Delete
$stripRN,
[1524] Fix | Delete
$defaultBRText,
[1525] Fix | Delete
$defaultSpanText,
[1526] Fix | Delete
$options
[1527] Fix | Delete
);
[1528] Fix | Delete
}
[1529] Fix | Delete
}
[1530] Fix | Delete
// Forcing tags to be closed implies that we don't trust the html, but
[1531] Fix | Delete
// it can lead to parsing errors if we SHOULD trust the html.
[1532] Fix | Delete
if (!$forceTagsClosed) {
[1533] Fix | Delete
$this->optional_closing_array = array();
[1534] Fix | Delete
}
[1535] Fix | Delete
[1536] Fix | Delete
$this->_target_charset = $target_charset;
[1537] Fix | Delete
}
[1538] Fix | Delete
[1539] Fix | Delete
function __destruct()
[1540] Fix | Delete
{
[1541] Fix | Delete
$this->clear();
[1542] Fix | Delete
}
[1543] Fix | Delete
[1544] Fix | Delete
/**
[1545] Fix | Delete
* @param $str
[1546] Fix | Delete
* @param bool $lowercase
[1547] Fix | Delete
* @param bool $stripRN
[1548] Fix | Delete
* @param string $defaultBRText
[1549] Fix | Delete
* @param string $defaultSpanText
[1550] Fix | Delete
* @param int $options
[1551] Fix | Delete
*
[1552] Fix | Delete
* @return $this
[1553] Fix | Delete
*/
[1554] Fix | Delete
function load(
[1555] Fix | Delete
$str,
[1556] Fix | Delete
$lowercase = true,
[1557] Fix | Delete
$stripRN = true,
[1558] Fix | Delete
$defaultBRText = DEFAULT_BR_TEXT,
[1559] Fix | Delete
$defaultSpanText = DEFAULT_SPAN_TEXT,
[1560] Fix | Delete
$options = 0)
[1561] Fix | Delete
{
[1562] Fix | Delete
global $debug_object;
[1563] Fix | Delete
[1564] Fix | Delete
// prepare
[1565] Fix | Delete
$this->prepare($str, $lowercase, $defaultBRText, $defaultSpanText);
[1566] Fix | Delete
[1567] Fix | Delete
// Per sourceforge http://sourceforge.net/tracker/?func=detail&aid=2949097&group_id=218559&atid=1044037
[1568] Fix | Delete
// Script tags removal now preceeds style tag removal.
[1569] Fix | Delete
// strip out <script> tags
[1570] Fix | Delete
$this->remove_noise("'<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>'is");
[1571] Fix | Delete
$this->remove_noise("'<\s*script\s*>(.*?)<\s*/\s*script\s*>'is");
[1572] Fix | Delete
[1573] Fix | Delete
// strip out the \r \n's if we are told to.
[1574] Fix | Delete
if ($stripRN) {
[1575] Fix | Delete
$this->doc = str_replace("\r", ' ', $this->doc);
[1576] Fix | Delete
$this->doc = str_replace("\n", ' ', $this->doc);
[1577] Fix | Delete
[1578] Fix | Delete
// set the length of content since we have changed it.
[1579] Fix | Delete
$this->size = strlen($this->doc);
[1580] Fix | Delete
}
[1581] Fix | Delete
[1582] Fix | Delete
// strip out cdata
[1583] Fix | Delete
$this->remove_noise("'<!\[CDATA\[(.*?)\]\]>'is", true);
[1584] Fix | Delete
// strip out comments
[1585] Fix | Delete
$this->remove_noise("'<!--(.*?)-->'is");
[1586] Fix | Delete
// strip out <style> tags
[1587] Fix | Delete
$this->remove_noise("'<\s*style[^>]*[^/]>(.*?)<\s*/\s*style\s*>'is");
[1588] Fix | Delete
$this->remove_noise("'<\s*style\s*>(.*?)<\s*/\s*style\s*>'is");
[1589] Fix | Delete
// strip out preformatted tags
[1590] Fix | Delete
$this->remove_noise("'<\s*(?:code)[^>]*>(.*?)<\s*/\s*(?:code)\s*>'is");
[1591] Fix | Delete
// strip out server side scripts
[1592] Fix | Delete
$this->remove_noise("'(<\?)(.*?)(\?>)'s", true);
[1593] Fix | Delete
[1594] Fix | Delete
if($options & HDOM_SMARTY_AS_TEXT) { // Strip Smarty scripts
[1595] Fix | Delete
$this->remove_noise("'(\{\w)(.*?)(\})'s", true);
[1596] Fix | Delete
}
[1597] Fix | Delete
[1598] Fix | Delete
// parsing
[1599] Fix | Delete
$this->parse();
[1600] Fix | Delete
// end
[1601] Fix | Delete
$this->root->_[HDOM_INFO_END] = $this->cursor;
[1602] Fix | Delete
$this->parse_charset();
[1603] Fix | Delete
[1604] Fix | Delete
// make load function chainable
[1605] Fix | Delete
return $this;
[1606] Fix | Delete
}
[1607] Fix | Delete
[1608] Fix | Delete
function load_file()
[1609] Fix | Delete
{
[1610] Fix | Delete
$args = func_get_args();
[1611] Fix | Delete
[1612] Fix | Delete
if(($doc = call_user_func_array('file_get_contents', $args)) !== false) {
[1613] Fix | Delete
$this->load($doc, true);
[1614] Fix | Delete
} else {
[1615] Fix | Delete
return false;
[1616] Fix | Delete
}
[1617] Fix | Delete
}
[1618] Fix | Delete
[1619] Fix | Delete
function set_callback($function_name)
[1620] Fix | Delete
{
[1621] Fix | Delete
$this->callback = $function_name;
[1622] Fix | Delete
}
[1623] Fix | Delete
[1624] Fix | Delete
function remove_callback()
[1625] Fix | Delete
{
[1626] Fix | Delete
$this->callback = null;
[1627] Fix | Delete
}
[1628] Fix | Delete
[1629] Fix | Delete
function save($filepath = '')
[1630] Fix | Delete
{
[1631] Fix | Delete
$ret = $this->root->innertext();
[1632] Fix | Delete
if ($filepath !== '') { file_put_contents($filepath, $ret, LOCK_EX); }
[1633] Fix | Delete
return $ret;
[1634] Fix | Delete
}
[1635] Fix | Delete
[1636] Fix | Delete
/**
[1637] Fix | Delete
* @param $selector
[1638] Fix | Delete
* @param null $idx
[1639] Fix | Delete
* @param false $lowercase
[1640] Fix | Delete
*
[1641] Fix | Delete
* @return simple_html_dom_node | mixed
[1642] Fix | Delete
*/
[1643] Fix | Delete
function find($selector, $idx = null, $lowercase = false)
[1644] Fix | Delete
{
[1645] Fix | Delete
return $this->root->find($selector, $idx, $lowercase);
[1646] Fix | Delete
}
[1647] Fix | Delete
[1648] Fix | Delete
function clear()
[1649] Fix | Delete
{
[1650] Fix | Delete
if (isset($this->nodes)) {
[1651] Fix | Delete
foreach ($this->nodes as $n) {
[1652] Fix | Delete
$n->clear();
[1653] Fix | Delete
$n = null;
[1654] Fix | Delete
}
[1655] Fix | Delete
}
[1656] Fix | Delete
[1657] Fix | Delete
// This add next line is documented in the sourceforge repository.
[1658] Fix | Delete
// 2977248 as a fix for ongoing memory leaks that occur even with the
[1659] Fix | Delete
// use of clear.
[1660] Fix | Delete
if (isset($this->children)) {
[1661] Fix | Delete
foreach ($this->children as $n) {
[1662] Fix | Delete
$n->clear();
[1663] Fix | Delete
$n = null;
[1664] Fix | Delete
}
[1665] Fix | Delete
}
[1666] Fix | Delete
[1667] Fix | Delete
if (isset($this->parent)) {
[1668] Fix | Delete
$this->parent->clear();
[1669] Fix | Delete
unset($this->parent);
[1670] Fix | Delete
}
[1671] Fix | Delete
[1672] Fix | Delete
if (isset($this->root)) {
[1673] Fix | Delete
$this->root->clear();
[1674] Fix | Delete
unset($this->root);
[1675] Fix | Delete
}
[1676] Fix | Delete
[1677] Fix | Delete
unset($this->doc);
[1678] Fix | Delete
unset($this->noise);
[1679] Fix | Delete
}
[1680] Fix | Delete
[1681] Fix | Delete
function dump($show_attr = true)
[1682] Fix | Delete
{
[1683] Fix | Delete
$this->root->dump($show_attr);
[1684] Fix | Delete
}
[1685] Fix | Delete
[1686] Fix | Delete
protected function prepare(
[1687] Fix | Delete
$str, $lowercase = true,
[1688] Fix | Delete
$defaultBRText = DEFAULT_BR_TEXT,
[1689] Fix | Delete
$defaultSpanText = DEFAULT_SPAN_TEXT)
[1690] Fix | Delete
{
[1691] Fix | Delete
$this->clear();
[1692] Fix | Delete
[1693] Fix | Delete
$this->doc = trim($str);
[1694] Fix | Delete
$this->size = strlen($this->doc);
[1695] Fix | Delete
$this->original_size = $this->size; // original size of the html
[1696] Fix | Delete
$this->pos = 0;
[1697] Fix | Delete
$this->cursor = 1;
[1698] Fix | Delete
$this->noise = array();
[1699] Fix | Delete
$this->nodes = array();
[1700] Fix | Delete
$this->lowercase = $lowercase;
[1701] Fix | Delete
$this->default_br_text = $defaultBRText;
[1702] Fix | Delete
$this->default_span_text = $defaultSpanText;
[1703] Fix | Delete
$this->root = new simple_html_dom_node($this);
[1704] Fix | Delete
$this->root->tag = 'root';
[1705] Fix | Delete
$this->root->_[HDOM_INFO_BEGIN] = -1;
[1706] Fix | Delete
$this->root->nodetype = HDOM_TYPE_ROOT;
[1707] Fix | Delete
$this->parent = $this->root;
[1708] Fix | Delete
if ($this->size > 0) { $this->char = $this->doc[0]; }
[1709] Fix | Delete
}
[1710] Fix | Delete
[1711] Fix | Delete
protected function parse()
[1712] Fix | Delete
{
[1713] Fix | Delete
while (true) {
[1714] Fix | Delete
// Read next tag if there is no text between current position and the
[1715] Fix | Delete
// next opening tag.
[1716] Fix | Delete
if (($s = $this->copy_until_char('<')) === '') {
[1717] Fix | Delete
if($this->read_tag()) {
[1718] Fix | Delete
continue;
[1719] Fix | Delete
} else {
[1720] Fix | Delete
return true;
[1721] Fix | Delete
}
[1722] Fix | Delete
}
[1723] Fix | Delete
[1724] Fix | Delete
// Add a text node for text between tags
[1725] Fix | Delete
$node = new simple_html_dom_node($this);
[1726] Fix | Delete
++$this->cursor;
[1727] Fix | Delete
$node->_[HDOM_INFO_TEXT] = $s;
[1728] Fix | Delete
$this->link_nodes($node, false);
[1729] Fix | Delete
}
[1730] Fix | Delete
}
[1731] Fix | Delete
[1732] Fix | Delete
protected function parse_charset()
[1733] Fix | Delete
{
[1734] Fix | Delete
global $debug_object;
[1735] Fix | Delete
[1736] Fix | Delete
$charset = null;
[1737] Fix | Delete
[1738] Fix | Delete
if (function_exists('get_last_retrieve_url_contents_content_type')) {
[1739] Fix | Delete
$contentTypeHeader = get_last_retrieve_url_contents_content_type();
[1740] Fix | Delete
$success = preg_match('/charset=(.+)/', $contentTypeHeader, $matches);
[1741] Fix | Delete
if ($success) {
[1742] Fix | Delete
$charset = $matches[1];
[1743] Fix | Delete
if (is_object($debug_object)) {
[1744] Fix | Delete
$debug_object->debug_log(2,
[1745] Fix | Delete
'header content-type found charset of: '
[1746] Fix | Delete
. $charset
[1747] Fix | Delete
);
[1748] Fix | Delete
}
[1749] Fix | Delete
}
[1750] Fix | Delete
}
[1751] Fix | Delete
[1752] Fix | Delete
if (empty($charset)) {
[1753] Fix | Delete
// https://www.w3.org/TR/html/document-metadata.html#statedef-http-equiv-content-type
[1754] Fix | Delete
$el = $this->root->find('meta[http-equiv=Content-Type]', 0, true);
[1755] Fix | Delete
[1756] Fix | Delete
if (!empty($el)) {
[1757] Fix | Delete
$fullvalue = $el->content;
[1758] Fix | Delete
if (is_object($debug_object)) {
[1759] Fix | Delete
$debug_object->debug_log(2,
[1760] Fix | Delete
'meta content-type tag found'
[1761] Fix | Delete
. $fullvalue
[1762] Fix | Delete
);
[1763] Fix | Delete
}
[1764] Fix | Delete
[1765] Fix | Delete
if (!empty($fullvalue)) {
[1766] Fix | Delete
$success = preg_match(
[1767] Fix | Delete
'/charset=(.+)/i',
[1768] Fix | Delete
$fullvalue,
[1769] Fix | Delete
$matches
[1770] Fix | Delete
);
[1771] Fix | Delete
[1772] Fix | Delete
if ($success) {
[1773] Fix | Delete
$charset = $matches[1];
[1774] Fix | Delete
} else {
[1775] Fix | Delete
// If there is a meta tag, and they don't specify the
[1776] Fix | Delete
// character set, research says that it's typically
[1777] Fix | Delete
// ISO-8859-1
[1778] Fix | Delete
if (is_object($debug_object)) {
[1779] Fix | Delete
$debug_object->debug_log(2,
[1780] Fix | Delete
'meta content-type tag couldn\'t be parsed. using iso-8859 default.'
[1781] Fix | Delete
);
[1782] Fix | Delete
}
[1783] Fix | Delete
[1784] Fix | Delete
$charset = 'ISO-8859-1';
[1785] Fix | Delete
}
[1786] Fix | Delete
}
[1787] Fix | Delete
}
[1788] Fix | Delete
}
[1789] Fix | Delete
[1790] Fix | Delete
if (empty($charset)) {
[1791] Fix | Delete
// https://www.w3.org/TR/html/document-metadata.html#character-encoding-declaration
[1792] Fix | Delete
if ($meta = $this->root->find('meta[charset]', 0)) {
[1793] Fix | Delete
$charset = $meta->charset;
[1794] Fix | Delete
if (is_object($debug_object)) {
[1795] Fix | Delete
$debug_object->debug_log(2, 'meta charset: ' . $charset);
[1796] Fix | Delete
}
[1797] Fix | Delete
}
[1798] Fix | Delete
}
[1799] Fix | Delete
[1800] Fix | Delete
if (empty($charset)) {
[1801] Fix | Delete
// Try to guess the charset based on the content
[1802] Fix | Delete
// Requires Multibyte String (mbstring) support (optional)
[1803] Fix | Delete
if (function_exists('mb_detect_encoding')) {
[1804] Fix | Delete
/**
[1805] Fix | Delete
* mb_detect_encoding() is not intended to distinguish between
[1806] Fix | Delete
* charsets, especially single-byte charsets. Its primary
[1807] Fix | Delete
* purpose is to detect which multibyte encoding is in use,
[1808] Fix | Delete
* i.e. UTF-8, UTF-16, shift-JIS, etc.
[1809] Fix | Delete
*
[1810] Fix | Delete
* -- https://bugs.php.net/bug.php?id=38138
[1811] Fix | Delete
*
[1812] Fix | Delete
* Adding both CP1251/ISO-8859-5 and CP1252/ISO-8859-1 will
[1813] Fix | Delete
* always result in CP1251/ISO-8859-5 and vice versa.
[1814] Fix | Delete
*
[1815] Fix | Delete
* Thus, only detect if it's either UTF-8 or CP1252/ISO-8859-1
[1816] Fix | Delete
* to stay compatible.
[1817] Fix | Delete
*/
[1818] Fix | Delete
$encoding = mb_detect_encoding(
[1819] Fix | Delete
$this->doc,
[1820] Fix | Delete
array( 'UTF-8', 'CP1252', 'ISO-8859-1' )
[1821] Fix | Delete
);
[1822] Fix | Delete
[1823] Fix | Delete
if ($encoding === 'CP1252' || $encoding === 'ISO-8859-1') {
[1824] Fix | Delete
// Due to a limitation of mb_detect_encoding
[1825] Fix | Delete
// 'CP1251'/'ISO-8859-5' will be detected as
[1826] Fix | Delete
// 'CP1252'/'ISO-8859-1'. This will cause iconv to fail, in
[1827] Fix | Delete
// which case we can simply assume it is the other charset.
[1828] Fix | Delete
if (!@iconv('CP1252', 'UTF-8', $this->doc)) {
[1829] Fix | Delete
$encoding = 'CP1251';
[1830] Fix | Delete
}
[1831] Fix | Delete
}
[1832] Fix | Delete
[1833] Fix | Delete
if ($encoding !== false) {
[1834] Fix | Delete
$charset = $encoding;
[1835] Fix | Delete
if (is_object($debug_object)) {
[1836] Fix | Delete
$debug_object->debug_log(2, 'mb_detect: ' . $charset);
[1837] Fix | Delete
}
[1838] Fix | Delete
}
[1839] Fix | Delete
}
[1840] Fix | Delete
}
[1841] Fix | Delete
[1842] Fix | Delete
if (empty($charset)) {
[1843] Fix | Delete
// Assume it's UTF-8 as it is the most likely charset to be used
[1844] Fix | Delete
$charset = 'UTF-8';
[1845] Fix | Delete
if (is_object($debug_object)) {
[1846] Fix | Delete
$debug_object->debug_log(2, 'No match found, assume ' . $charset);
[1847] Fix | Delete
}
[1848] Fix | Delete
}
[1849] Fix | Delete
[1850] Fix | Delete
// Since CP1252 is a superset, if we get one of it's subsets, we want
[1851] Fix | Delete
// it instead.
[1852] Fix | Delete
if ((strtolower($charset) == 'iso-8859-1')
[1853] Fix | Delete
|| (strtolower($charset) == 'latin1')
[1854] Fix | Delete
|| (strtolower($charset) == 'latin-1')) {
[1855] Fix | Delete
$charset = 'CP1252';
[1856] Fix | Delete
if (is_object($debug_object)) {
[1857] Fix | Delete
$debug_object->debug_log(2,
[1858] Fix | Delete
'replacing ' . $charset . ' with CP1252 as its a superset'
[1859] Fix | Delete
);
[1860] Fix | Delete
}
[1861] Fix | Delete
}
[1862] Fix | Delete
[1863] Fix | Delete
if (is_object($debug_object)) {
[1864] Fix | Delete
$debug_object->debug_log(1, 'EXIT - ' . $charset);
[1865] Fix | Delete
}
[1866] Fix | Delete
[1867] Fix | Delete
return $this->_charset = $charset;
[1868] Fix | Delete
}
[1869] Fix | Delete
[1870] Fix | Delete
protected function read_tag()
[1871] Fix | Delete
{
[1872] Fix | Delete
// Set end position if no further tags found
[1873] Fix | Delete
if ($this->char !== '<') {
[1874] Fix | Delete
$this->root->_[HDOM_INFO_END] = $this->cursor;
[1875] Fix | Delete
return false;
[1876] Fix | Delete
}
[1877] Fix | Delete
[1878] Fix | Delete
$begin_tag_pos = $this->pos;
[1879] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[1880] Fix | Delete
[1881] Fix | Delete
// end tag
[1882] Fix | Delete
if ($this->char === '/') {
[1883] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[1884] Fix | Delete
[1885] Fix | Delete
// Skip whitespace in end tags (i.e. in "</ html>")
[1886] Fix | Delete
$this->skip($this->token_blank);
[1887] Fix | Delete
$tag = $this->copy_until_char('>');
[1888] Fix | Delete
[1889] Fix | Delete
// Skip attributes in end tags
[1890] Fix | Delete
if (($pos = strpos($tag, ' ')) !== false) {
[1891] Fix | Delete
$tag = substr($tag, 0, $pos);
[1892] Fix | Delete
}
[1893] Fix | Delete
[1894] Fix | Delete
$parent_lower = strtolower($this->parent->tag);
[1895] Fix | Delete
$tag_lower = strtolower($tag);
[1896] Fix | Delete
[1897] Fix | Delete
// The end tag is supposed to close the parent tag. Handle situations
[1898] Fix | Delete
// when it doesn't
[1899] Fix | Delete
if ($parent_lower !== $tag_lower) {
[1900] Fix | Delete
// Parent tag does not have to be closed necessarily (optional closing tag)
[1901] Fix | Delete
// Current tag is a block tag, so it may close an ancestor
[1902] Fix | Delete
if (isset($this->optional_closing_tags[$parent_lower])
[1903] Fix | Delete
&& isset($this->block_tags[$tag_lower])) {
[1904] Fix | Delete
[1905] Fix | Delete
$this->parent->_[HDOM_INFO_END] = 0;
[1906] Fix | Delete
$org_parent = $this->parent;
[1907] Fix | Delete
[1908] Fix | Delete
// Traverse ancestors to find a matching opening tag
[1909] Fix | Delete
// Stop at root node
[1910] Fix | Delete
while (($this->parent->parent)
[1911] Fix | Delete
&& strtolower($this->parent->tag) !== $tag_lower
[1912] Fix | Delete
){
[1913] Fix | Delete
$this->parent = $this->parent->parent;
[1914] Fix | Delete
}
[1915] Fix | Delete
[1916] Fix | Delete
// If we don't have a match add current tag as text node
[1917] Fix | Delete
if (strtolower($this->parent->tag) !== $tag_lower) {
[1918] Fix | Delete
$this->parent = $org_parent; // restore origonal parent
[1919] Fix | Delete
[1920] Fix | Delete
if ($this->parent->parent) {
[1921] Fix | Delete
$this->parent = $this->parent->parent;
[1922] Fix | Delete
}
[1923] Fix | Delete
[1924] Fix | Delete
$this->parent->_[HDOM_INFO_END] = $this->cursor;
[1925] Fix | Delete
return $this->as_text_node($tag);
[1926] Fix | Delete
}
[1927] Fix | Delete
} elseif (($this->parent->parent)
[1928] Fix | Delete
&& isset($this->block_tags[$tag_lower])
[1929] Fix | Delete
) {
[1930] Fix | Delete
// Grandparent exists and current tag is a block tag, so our
[1931] Fix | Delete
// parent doesn't have an end tag
[1932] Fix | Delete
$this->parent->_[HDOM_INFO_END] = 0; // No end tag
[1933] Fix | Delete
$org_parent = $this->parent;
[1934] Fix | Delete
[1935] Fix | Delete
// Traverse ancestors to find a matching opening tag
[1936] Fix | Delete
// Stop at root node
[1937] Fix | Delete
while (($this->parent->parent)
[1938] Fix | Delete
&& strtolower($this->parent->tag) !== $tag_lower
[1939] Fix | Delete
) {
[1940] Fix | Delete
$this->parent = $this->parent->parent;
[1941] Fix | Delete
}
[1942] Fix | Delete
[1943] Fix | Delete
// If we don't have a match add current tag as text node
[1944] Fix | Delete
if (strtolower($this->parent->tag) !== $tag_lower) {
[1945] Fix | Delete
$this->parent = $org_parent; // restore origonal parent
[1946] Fix | Delete
$this->parent->_[HDOM_INFO_END] = $this->cursor;
[1947] Fix | Delete
return $this->as_text_node($tag);
[1948] Fix | Delete
}
[1949] Fix | Delete
} elseif (($this->parent->parent)
[1950] Fix | Delete
&& strtolower($this->parent->parent->tag) === $tag_lower
[1951] Fix | Delete
) { // Grandparent exists and current tag closes it
[1952] Fix | Delete
$this->parent->_[HDOM_INFO_END] = 0;
[1953] Fix | Delete
$this->parent = $this->parent->parent;
[1954] Fix | Delete
} else { // Random tag, add as text node
[1955] Fix | Delete
return $this->as_text_node($tag);
[1956] Fix | Delete
}
[1957] Fix | Delete
}
[1958] Fix | Delete
[1959] Fix | Delete
// Set end position of parent tag to current cursor position
[1960] Fix | Delete
$this->parent->_[HDOM_INFO_END] = $this->cursor;
[1961] Fix | Delete
[1962] Fix | Delete
if ($this->parent->parent) {
[1963] Fix | Delete
$this->parent = $this->parent->parent;
[1964] Fix | Delete
}
[1965] Fix | Delete
[1966] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[1967] Fix | Delete
return true;
[1968] Fix | Delete
}
[1969] Fix | Delete
[1970] Fix | Delete
// start tag
[1971] Fix | Delete
$node = new simple_html_dom_node($this);
[1972] Fix | Delete
$node->_[HDOM_INFO_BEGIN] = $this->cursor;
[1973] Fix | Delete
++$this->cursor;
[1974] Fix | Delete
$tag = $this->copy_until($this->token_slash); // Get tag name
[1975] Fix | Delete
$node->tag_start = $begin_tag_pos;
[1976] Fix | Delete
[1977] Fix | Delete
// doctype, cdata & comments...
[1978] Fix | Delete
// <!DOCTYPE html>
[1979] Fix | Delete
// <![CDATA[ ... ]]>
[1980] Fix | Delete
// <!-- Comment -->
[1981] Fix | Delete
if (isset($tag[0]) && $tag[0] === '!') {
[1982] Fix | Delete
$node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until_char('>');
[1983] Fix | Delete
[1984] Fix | Delete
if (isset($tag[2]) && $tag[1] === '-' && $tag[2] === '-') { // Comment ("<!--")
[1985] Fix | Delete
$node->nodetype = HDOM_TYPE_COMMENT;
[1986] Fix | Delete
$node->tag = 'comment';
[1987] Fix | Delete
} else { // Could be doctype or CDATA but we don't care
[1988] Fix | Delete
$node->nodetype = HDOM_TYPE_UNKNOWN;
[1989] Fix | Delete
$node->tag = 'unknown';
[1990] Fix | Delete
}
[1991] Fix | Delete
[1992] Fix | Delete
if ($this->char === '>') { $node->_[HDOM_INFO_TEXT] .= '>'; }
[1993] Fix | Delete
[1994] Fix | Delete
$this->link_nodes($node, true);
[1995] Fix | Delete
$this->char = (++$this->pos < $this->size) ? $this->doc[$this->pos] : null; // next
[1996] Fix | Delete
return true;
[1997] Fix | Delete
}
[1998] Fix | Delete
[1999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function