代码之家  ›  专栏  ›  技术社区  ›  ilija veselica

从字符串[duplicate]获取所有图像url

  •  8
  • ilija veselica  · 技术社区  · 15 年前

    可能重复:
    How to extract img src, title and alt from html using php?


    我找到了从字符串中获取第一个图像的解决方案:

    preg_match('~<img[^>]*src\s?=\s?[\'"]([^\'"]*)~i',$string, $matches);
    

    但我无法从字符串中获取所有图像。
    还有一件事。。。如果图像包含可选文本( alt
    提前感谢,,

    5 回复  |  直到 7 年前
        1
  •  33
  •   cletus    15 年前

    不要对正则表达式执行此操作。而是解析HTML。看看 Parse HTML With PHP And DOM . 这是PHP5.2.x(可能更早)中的标准特性。基本上,获取图像的逻辑大致如下:

    $dom = new domDocument;
    $dom->loadHTML($html);
    $dom->preserveWhiteSpace = false;
    $images = $dom->getElementsByTagName('img');
    foreach ($images as $image) {
      echo $image->getAttribute('src');
    }
    

    这应该是微不足道的,以适应寻找图像。

        2
  •  8
  •   ilija veselica    15 年前

    这是我尝试过的,但无法获得src的打印值

     $dom = new domDocument;
    
        /*** load the html into the object ***/
        $dom->loadHTML($html);
    
        /*** discard white space ***/
        $dom->preserveWhiteSpace = false;
    
        /*** the table by its tag name ***/
        $images = $dom->getElementsByTagName('img');
    
        /*** loop over the table rows ***/
        foreach ($images as $img)
        {
            /*** get each column by tag name ***/
            $url = $img->getElementsByTagName('src');
            /*** echo the values ***/
            echo $url->nodeValue;
            echo '<hr />';
        }
    

    编辑:我解决了这个问题

    $dom = new domDocument;
    
    /*** load the html into the object ***/
    $dom->loadHTML($string);
    
    /*** discard white space ***/
    $dom->preserveWhiteSpace = false;
    
    $images = $dom->getElementsByTagName('img');
    
    foreach($images as $img)
        {
            $url = $img->getAttribute('src');   
            $alt = $img->getAttribute('alt');   
            echo "Title: $alt<br>$url<br>";
        }
    
        3
  •  2
  •   John Carter    15 年前

    请注意,正则表达式是解析任何涉及匹配大括号的内容的糟糕方法。

    DOMDocument

        4
  •  0
  •   Lars D    15 年前

        5
  •  0
  •   Per Östlund    15 年前

    查看preg_match_all以获得所有匹配。