如何通过php dom删除字符串中的一个图像

时间:2015-06-06 11:05:32

标签: php dom

我有一个字符串,里面有一些<img>

$string = '  <img src="pic.jpg">  and <img src="pic2.jpg">';
    $doc = new DOMDocument('1.0', 'UTF-8');
        libxml_use_internal_errors(true);
        $doc->loadHTML(mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8'));
        libxml_clear_errors();
        $imgs = $doc->getElementsByTagName('img');
        foreach ($imgs as $img) 
        {
            if($img->getAttribute('src') == 'pic.jpg')
            {
                // I want delete that picture form string
                $img->parentNode->removeChild($img);
            }
                else
                  $img->setAttribute('class', 'image normall');

        }
        $string = $doc->saveHTML();
        echo $string;

在我打印$string时功能结束时,目标图片已被删除,但对于其他图片,不添加任何课程!

但如果我删除$img->parentNode->removeChild($img);,该课程将添加! 我错了什么?

修改 请检查此示例字符串:

$string = '  <img src="pic.jpg">  and <img src="pic2.jpg">';

2 个答案:

答案 0 :(得分:1)

如果您向后反复 ,则可以删除节点。

只需更改

// Forward iteration
foreach ($imgs as $img) {

// Reverse iteration
for($i = $imgs->length; --$i >= 0;) {
     $img = $imgs->item($i);

参考:http://php.net/manual/en/class.domnodelist.php#83390

答案 1 :(得分:0)

最后,我通过这种改变解决了这个问题......希望能帮助别人......

$string = '  <img src="pic.jpg">  and <img src="pic2.jpg">';
    $doc = new DOMDocument('1.0', 'UTF-8');
        libxml_use_internal_errors(true);
        $doc->loadHTML(mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8'));
        libxml_clear_errors();
        $imgs = $doc->getElementsByTagName('img');
        $imgs1 = $imgs2 = array();
        foreach($imgs as $img) {
            if($img->getAttribute('src') == 'pic.jpg')
            {
                $imgs1[] = $img;
            }
            else
            $imgs2[] = $img;
        }
        foreach($imgs1 as $img) {
            $img->parentNode->removeChild($img);
        }
        foreach ($imgs2 as $img) 
        {

            $img->setAttribute('class', 'image normall');

        }
        $string = $doc->saveHTML();
        echo $string;