如何通过php获取特定类之间的属性内容

时间:2013-06-06 20:24:06

标签: attributes tags

这是一个输入代码:

$str='
<div class="_53d _53q">Not necessary data</div>
<div class="tagWrapper">
<i style="background-image: url(https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-ash4/p206x206/401581_10201210435645736_1028078736_n.jpg);" class="uiMediaThumbImg"></i>
<div class="taggerOverlay hidden_elem"><div class="left blackwash"></div></div>
</div>

<div class="_53d _53q">Not necessary data</div>
<div class="_53d _53q">Not necessary data</div>
<div class="tagWrapper">
<i style="background-image: url(https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-ash3/p206x206/486115_10200477972538937_146909394_n.jpg);" class="uiMediaThumbImg"></i>
<div class="taggerOverlay hidden_elem"><div class="left blackwash"></div></div>
</div>
<div class="_53d _53q">Not necessary data</div>
';

现在我希望输出为:

 Array
    (
        [0] => https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-ash4/p206x206/401581_10201210435645736_1028078736_n.jpg
        [1] => https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-ash3/p206x206/486115_10200477972538937_146909394_n.jpg
    )

我想获取" <div class="tagWrapper"> <i "属性之间的所有图像链接,并丢弃所有其他内容。请帮我给一个PHP代码。

1 个答案:

答案 0 :(得分:1)

您应该使用DomDocument来解析html。

您可以通过在<i>元素上添加额外级别的搜索来改进此代码,但我认为<i>标记不常见。

进入style属性后,我使用了字符串解析。它应该被改进为更多样化,但这应该让你更接近你的目标。

    $arr = array();

    $dom = new DOMDocument;
    $dom->loadHTML($str);
    foreach ($dom->getElementsByTagName('i') as $node) {
        if($node->hasAttribute('style')) {
            $nodes = explode(":",trim($node->getAttribute('style')), 2);
            if(trim($nodes[0]) === 'background-image') {
                $pos = strpos(trim($nodes[1]), "url");
                if($pos !== false) {
                    $arr[] = substr(trim($nodes[1]), 4, -2);
                }
            }
        }
    }