1

我正在尝试使用Simple HTML DOM Parser从页面 B 中提取一些 html 并将 html 代码插入当前页面。(请温柔,我是PHP新手)

我定位的页面 B html 如下所示: <div id="testdiv">B</div>

我需要在当前页面中插入相同的代码。

我在当前页面上的 PHP:

<?php
include_once '%resource(simple_html_dom.php)%';
$ret = Array();
$html = file_get_html('b.html');
$ret[] = $html->find('div[id=testdiv]', 0);
$ret->outertext = $ret->makeup() . $ret->innertext . '</div>';
echo $ret;
?>

我试图把它拼凑在一起,但仍然没有运气。我希望在查看当前页面时看到“B”,但我绝对需要所有的 html 编码都在那里;)
目前收到错误“调用非对象上的成员函数化妆()”

PS 一旦运行,我可能需要一种方法来引入 pg B 上的 css 和 js。

谢谢你的帮助,比尔

更新代码:

<?php
include_once '%resource(simple_html_dom.php)%';
$html = file_get_html('b.html');
foreach($html->find('div[id=testdiv]') as $ret)
  echo $ret;
?>

所以现在我需要能够从页面 B 获取特定的 css 和 js 文件,这样 div 中的任何内容都会正确呈现。这是当前页面的示例如果您查看页面 B 的标题,将会有一个典型的 css 和 js 文件,称为 b_files/stacks_page_page1.css & b_files/stacks_page_page1.js

这些是我需要在当前页面中引用的文件,相对路径根据需要进行了更改。我还添加了一个位于文件夹中的页面 C(B 位于当前页面的根目录中),因此路径将不同。我想将 css 文件和 js 文件结合在一起会很好,所以不会有一堆 dom 调用。

总体而言,将这些文件带入的代码是什么?

4

3 回答 3

1

因为 $ret 是一个数组并且没有名为“makeup()”的方法,所以您正在获得“对非对象上的成员函数 makeup() 的调用”。

我不确定你到底想要做什么,但这样的事情可能会让你更接近一点。我假设你有一个名为 make() 的函数,它产生一个字符串“< div>”:

未测试

<?
php include_once '%resource(simple_html_dom.php)%';  
$html = file_get_html('b.html'); 
$ret = $html->find('div[id=testdiv]', 0)->innertext; 
$ret = makeup() . $ret . '</div>'; 

echo $ret; 
?> 
于 2012-10-11T21:29:30.360 回答
1

代码存在许多问题。 $ret[]意味着推送到数组上,但是接下来你调用对象方法的下一行,这就是你得到错误的原因。

一旦该问题得到解决,$ret->makeup根据 API 就不是有效的方法(除非您已修改/扩展它)。我不确定你认为你在做什么$ret->outertext = $ret->makeup() . $ret->innertext . '</div>',但如果你期望B你的输出:

<?php
include_once 'simple_html_dom.php';
$html = file_get_html('b.html');
$ret = $html->find('div[id=testdiv]', 0);
if ($ret) {
    echo $ret->innertext;
}
于 2012-10-11T21:29:41.067 回答
1
foreach($html->find('div[id=testdiv]') as $content)
    echo $content;

结果会是<div id="testdiv">B</div> ,它将在浏览器上显示为

B

如果要显示代码:

foreach($html->find('div[id=testdiv]') as $content)
    echo "<xmp>".$content."</xmp>";

实际结果:<xmp><div id="testdiv">B</div></xmp>

然后在浏览器的显示屏上:

<div id="testdiv">B</div>
于 2012-10-11T21:32:43.213 回答