如何使用 html dom 解析器 PHP 在特定 html 标记开始之前获取文本

how to get text before the starting of specific html tag using html dom parser PHP

我不知道如何在 html 标签之间获取文本。在我的场景中,除了段落标签 <p>.

之外,所需的文本不包含在标签之间
<div class="entry clearfix">
<p>111</p>
<p><img class="alignnone size-medium wp-image-38376" src="1.jpg" alt="Talvar" /></p>
<p><strong>111: </strong>111<br/>
    <strong>111:</strong> 111<br/>
    <strong>111:</strong> 111 111<br/>
    <strong>111: </strong>111<br/>
    <strong>111: </strong>1111
</p>
<p><strong>111</strong></p>
<p>
    <strong>01 &#8211;</strong> data1 <strong><a href="#">Download</a><br/>
    </strong><em>222</em><br/>
    <strong>02 &#8211;</strong> data2 <strong><a href="#">Download</a><br/>
    </strong><em>222</em><br/>
    <strong>03 &#8211;</strong> data3 <strong><a href="#">Download</a><br/>
    </strong><em>222</em><br/>
    <strong>04 &#8211;</strong> data4 <strong><a href="#">Download</a><br/>
    </strong><em>222</em>
</p>
<p><strong>222</strong></p>
<p><strong><a href="" target="_blank">3333</a></strong></p>
<p><strong>eb</strong></p></div>

我需要数据1、数据2、数据3、数据4。为此,我发现 <p> 是数组编号 4 中的编号 5。

    foreach($html->find('div[class="entry"]') as $row){
        $a = $row->find('p',4);
        echo $dt = $a->find('text',1)->plaintext; // returns me only data1
    }

data1、data2、data3、data4 不在任何标签之间,除了 <p> 如果我通过 striptags() 获取它们 returns 所有文本以及 111、下载、222 等。请告诉我如何获得数据系列。

不确定更优雅的方式,但这应该也有效:

foreach($html->find('div[class="entry"]') as $row){
$a = $row->find('p',4);

$str=$a->find('strong');
$em=$a->find('em');

foreach($str as $tag) {

$a=str_replace($tag,'',$a);
$a=str_replace($em,'',$a);


        }

}

echo strip_tags($a,'<br>'); // if you want to keep br tags

所以,想法是 - 删除 strongem 标签(以及里面的文本内容,包括链接),在目标 p 内,使用 str_replace,然后得到其余的部分。 如果您的 HTML 结构类似于您发布的这个结构,它应该可以工作。