【问题标题】:Get multiple image src from a string in PHP从PHP中的字符串获取多个图像src
【发布时间】:2016-02-17 15:50:54
【问题描述】:
$string = "<p>dsaasdsdsdas sdhio ahsas asdsad adhaso img da sda a asd a as src asdasd ds.</p>   <p>dsaasdsdsdas sdhio ahsas asdsad adhaso img da sda a asd a as src asdasd ds.</p>  <p>dsaasdsdsdas <img src='http://stie.com/teste.jpg'> ds.</p>   <p>dsaasdsdsdas sdhio ahsas asdsad adhaso img da sda a asd <img src='http://segunda.com/teste.jpg'> a as src asdasd ds.</p>     <p>dsaasdsdsdas sdhio ahsas asdsad adhaso img da sda a asd a as src asdasd ds.</p>";

$doc = new DOMDocument();   
$doc->loadHTML($string);    
$xpath = new DOMXPath($doc);    
$src = $xpath->evaluate("string(//img/@src)");

echo $src;

我有这段代码试图从 PHP 中的字符串中提取所有 img 源。 但是我的代码有一个问题,如果它有多个图像,它只会获取第一个图像 src。如何更改它以将字符串中的所有图像 src 给我,例如数组?

【问题讨论】:

    标签: javascript php image xpath src


    【解决方案1】:

    问题不在于您的 PHP 代码,而是 XPath 1.0(您的库使用的)的特性。如果您在一组节点上使用string() 之类的函数,则该函数将仅应用于第一个项,而所有其他项将被忽略。

    不是寻找string(//img/@src),而是在第一步中选择所有img元素,然后才使用getAttribute()检索它们的src属性值。

    PHP

    <?php
    
    $string = "<p>dsaasdsdsdas sdhio ahsas asdsad adhaso img da sda a asd a as src asdasd ds.</p>   <p>dsaasdsdsdas sdhio ahsas asdsad adhaso img da sda a asd a as src asdasd ds.</p>  <p>dsaasdsdsdas <img src='http://stie.com/teste.jpg'> ds.</p>   <p>dsaasdsdsdas sdhio ahsas asdsad adhaso img da sda a asd <img src='http://segunda.com/teste.jpg'> a as src asdasd ds.</p>     <p>dsaasdsdsdas sdhio ahsas asdsad adhaso img da sda a asd a as src asdasd ds.</p>";
    
    $doc = new DOMDocument();   
    $doc->loadHTML($string);    
    $xpath = new DOMXPath($doc);    
    $images = $xpath->evaluate("//img");
    
    foreach ($images as $image) {
        $src = $image->getAttribute('src');
        echo $src;
        echo "\n";
    }
    
    ?>
    

    输出

    http://stie.com/teste.jpg
    http://segunda.com/teste.jpg
    

    请注意:正如另一个答案所暗示的那样,在大多数情况下,用正则表达式解析 HTML 字符串并不是一个好主意。

    【讨论】:

      【解决方案2】:
       preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $yourDomString, $matches);
      print_r($matches); //returns all SRC results of img tags.
      

      了解更多关于preg_match

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-03
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        相关资源
        最近更新 更多