php 仅从外部 div 从 url 检索一个字符串

php only retrieving one string from external div from url

我正在尝试 link 我的页面到另一个网站,我可以在其中使用 div 标签以使我的网站保持最新。

经过一些研究,我得到了一些代码,它只回显了 1 个字符串,而页面上有多个 div 类,我想全部回显。我只是想知道这是否可能?

这是当前代码:

<?php
$url = 'http://www.domain.com';
$content = file_get_contents($url);
$activity = explode( '<div class="class">' , $content );
$activity_second = explode("</div>" , $activity );

echo $activity_second[0];
?>

我可以回显 $activity_second[0] 将显示第一行,而 $activity_second[1] 将显示第二行。

但是,我希望扩展它以允许将同一页面上的所有 div 类 放入一个数组中,然后可以将其回显到不同的部分table.

提前感谢您的帮助。

问题可能是第一个数组的第一个键进入第二个爆炸。在 $activity 之后尝试以下操作:

$result = array();

foreach ($activity as $div){
    $handle = explode("</div>", $div);
    $result -> append($handle);
}
foreach ($result as $key){
   echo $key;
}

很抱歉原来的回复,我误解了你的问题。

正则表达式方式也可以。

如果您打算获取具有该 class 名称的 div 的所有内容,您可以使用正则表达式捕获那些 div 的标签之间的字符串:

preg_match_all('/<div class="class">([^<]+)<\/div>/', $content, $m);

print_r($m[1]);

现在 $m[1] 将是一个数组,其中包含那些 div 的所有内部 HTML 字符串。

规则是:when I act with HTML, I have to use a parser.

假设您有一个这样的 HTML 文档:

$html = '<html>
<head><title>Untitled</title></head>
<body>
    <div class="class">
        <b>My Content 1</b>
    </div>
    <div class="class">
        <b>My Content 2</b>
    </div>
    <div class="class">
        <b>My Content 3</b>
    </div>
</body>
</html>';

根据加载的 HTML:

将其加载到 DOMDocument object, init a DOMXPath 对象中
$dom = new DOMDocument();
libxml_use_internal_errors(1);
$dom->formatOutput = True;
$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );

并且使用此命令您可以访问所有 <div class="class">:

foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
    echo trim( $node->nodeValue ) . '<br>';
}

你的输出:

My Content 1
My Content 2
My Content 3

如果要将节点回显为 HTML,请替换 echo ...

与:

echo $dom->saveHTML( $node );

将输出:

<div class="class">
    <b>My Content 1</b>
</div>
<div class="class">
    <b>My Content 2</b>
</div>
<div class="class">
    <b>My Content 3</b>
</div>

最后,如果你只想回显节点的内部HTML,你必须这样写:

foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
    foreach ($node->childNodes as $child) 
    { 
        echo $dom->saveHTML( $child );
    }
}

你的输出将是:

<b>My Content 1</b>
<b>My Content 2</b>
<b>My Content 3</b>

  • 阅读更多关于 DOMDocument
  • 阅读更多关于 DOMXPath
  • 阅读why you can't parse [X]HTML with regex

让我看看我是否说清楚了,你有这样的东西:

<div id="another-class"><div class="class">some text 1</div></div>
<div class="class">some text 2</div>
<div class="class">some text 3</div>
<div class="class">some text 4</div>
<div class="class">some text 5</div>
<div class="class">some text 6</div>

并且您需要包含 div 元素的文本。如果这是正确的,替换:

$activity = explode( '<div class="class">' , $content );
$activity_second = explode("</div>" , $activity );

有了这个:

preg_match_all('#<div class="class">(.+?)</div>#', $content, $matches);

在此示例中,函数调用 $matches 后将具有以下内容:

Array
(
    [0] => Array
        (
            [0] => <div class="class">some text 1</div>
            [1] => <div class="class">some text 2</div>
            [2] => <div class="class">some text 3</div>
            [3] => <div class="class">some text 4</div>
            [4] => <div class="class">some text 5</div>
            [5] => <div class="class">some text 6</div>
        )

    [1] => Array
        (
            [0] => some text 1
            [1] => some text 2
            [2] => some text 3
            [3] => some text 4
            [4] => some text 5
            [5] => some text 6
        )

)

您需要的数据在 $matches[1] 中。