如何使用 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 –</strong> data1 <strong><a href="#">Download</a><br/>
</strong><em>222</em><br/>
<strong>02 –</strong> data2 <strong><a href="#">Download</a><br/>
</strong><em>222</em><br/>
<strong>03 –</strong> data3 <strong><a href="#">Download</a><br/>
</strong><em>222</em><br/>
<strong>04 –</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
所以,想法是 - 删除 strong
和 em
标签(以及里面的文本内容,包括链接),在目标 p
内,使用 str_replace
,然后得到其余的部分。
如果您的 HTML 结构类似于您发布的这个结构,它应该可以工作。
我不知道如何在 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 –</strong> data1 <strong><a href="#">Download</a><br/>
</strong><em>222</em><br/>
<strong>02 –</strong> data2 <strong><a href="#">Download</a><br/>
</strong><em>222</em><br/>
<strong>03 –</strong> data3 <strong><a href="#">Download</a><br/>
</strong><em>222</em><br/>
<strong>04 –</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
所以,想法是 - 删除 strong
和 em
标签(以及里面的文本内容,包括链接),在目标 p
内,使用 str_replace
,然后得到其余的部分。
如果您的 HTML 结构类似于您发布的这个结构,它应该可以工作。