【问题标题】:how to get text before the starting of specific html tag using html dom parser PHP如何使用html dom解析器PHP在特定html标签开始之前获取文本
【发布时间】:2015-10-04 19:51:25
【问题描述】:

我无法弄清楚在 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。为此,我找到了&lt;p&gt;,它是数组 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 不在除&lt;p&gt; 之外的任何标签之间,如果我通过striptags() 获取它们,它会返回所有文本以及 111、下载、222 等。请告知我如何获取数据系列。

【问题讨论】:

    标签: html tags


    【解决方案1】:

    不确定是否有更优雅的方式,但这应该也可以:

    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 结构与您发布的类似,它应该可以工作。

    【讨论】:

    • 感谢您的回答,实现了您的方法,但情况与我上面提到的strip_tags() 相同。完成 str_replace 后,其余结构仍待解决。 &lt;p&gt; 具有无法分配给数组的非托管 data 序列。尽管在获取组合数据后替换东西期间,我将其分解并转换为数组。我相信会有更好的方法。好的,谢谢。
    • 是的,你可以很容易地得到数组:$str=strip_tags($a,'
      '); print_r(explode('
      ',$str));但是,如果您找到更好的方法,请告诉我们。 :)
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2019-01-20
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多