【问题标题】:How can I grab div content to display in another page?如何获取 div 内容以显示在另一个页面中?
【发布时间】:2012-01-31 14:06:11
【问题描述】:

我已经四处寻找这个问题的解决方案,但我找到的每一个,并尝试都不起作用。

我正在尝试从论坛主题中获取 div 的内容。

我尝试使用 preg_match 并且只显示“数组”然后我尝试使用此方法

$html = file_get_contents("http://www.lcs-server.co.uk/forum/index.php/topic,$id_topic");
$dom = new DOMDocument;
$dom->loadHTML($html);
$element = $dom->getElementById("msg_$id_msg");
var_dump($element);

这将显示“object(DOMElement)#1 (0) { }”

$id_topic 和 $id_msg 在此代码上方定义,取自论坛数据库。我确实尝试从论坛数据库中获取消息,但它显示了 BB 代码标签,我希望它能够抓取帖子内容,并以 HTML 格式显示,因为它显示在论坛帖子本身上。

这是我现在正在使用的代码,它给了我“致命错误:无法重新声明 DOMinnerHTML()”

$html = file_get_contents("http://www.lcs-server.co.uk/forum/index.php/topic,$id_topic");

$dom = new DOMDocument;
$dom->loadHTML($html);
$domelement = $dom->getElementById("msg_$id_msg");

foreach ($domelement as $element) 
{ 
    echo DOMinnerHTML($element); 
} 

function DOMinnerHTML($DOMelement) 
{ 
$innerHTML = ""; 
    $children = $DOMelement->childNodes; 
    foreach ($children as $child) 
    { 
            $tmp_dom = new DOMDocument(); 
        $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
        $innerHTML.=trim($tmp_dom->saveHTML()); 
    } 
        return $innerHTML; 
    }

【问题讨论】:

  • 当您尝试检索它时,您确定 msg_ 存在吗?您的 $id_msg 检索方法可能已损坏。
  • 是的,它存在,我用它在我显示它的页面上创建指向论坛中实际帖子的链接。
  • 你想做什么?为什么需要在另一个页面上显示论坛帖子?它是在同一个域上,还是在不同的网站上(即您是否在抓取内容)?
  • 我做的有点像博客,我在某个论坛版块中发布一个主题,它会在主页上以表格的形式显示该主题,但它没有真的不管我为什么要这样做,我只是在这里发帖寻求有关如何做到这一点的帮助。

标签: php html preg-match


【解决方案1】:

getElementById 返回一个 DOM 节点对象。它不返回节点的 HTML。为此,您必须获取节点的“innerHTML”。由于某种原因,PHP 的 dom 对象并未正式支持这一点,但可以使用以下答案进行伪造:How to get innerHTML of DOMNode?

【讨论】:

  • 这是另一种方法。但是如果 phpdom 有 node.innerHTML 作为你在 javascript 中的属性,那就太好了。
  • 这个方法工作得几乎完美,直到我试图让它抓取来自不同主题的多个帖子。它给了我一个致命错误致命错误:无法重新声明 DOMinnerHTML()
  • 你不能在这样的循环中定义函数。它适用于一次迭代,然后您遇到重新定义问题。将函数定义放在循环之外。
  • 啊!是啊,我多么愚蠢。我已经搞定了,谢谢大家的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多