php preg_match_all用于链接到JPG/PNG

vof42yt1  于 12个月前  发布在  PHP
关注(0)|答案(2)|浏览(75)

我试图找到JPEG/PNG图像的链接。我有搜索没有文件扩展名checkm它的工作正常的链接:

preg_match_all('/<a.+href=[\'"]([^\'"]+).[\'"].*><img/i', $text, $matches);

但现在我正试图添加PNG/JPG的过滤器:(你能帮我吗?..

dauxcl2d

dauxcl2d1#

由DOMDO解决:

$dom = new DOMDocument();
@$dom->loadHTML($post->post_content);
$dom->preserveWhiteSpace = false;

$images = $dom->getElementsByTagName('img');

foreach ($images as $image) {
    if($image->parentNode->nodeName=='a') {
        print $image->parentNode->getAttribute('href');
    }
}
iqih9akk

iqih9akk2#

下面是回答这个问题的另一个贡献:How to get url path from images,font,etc in css files?
编辑:是的,正则表达式可能会导致问题,比如如果你试图替换嵌套的html。但是:这取决于代码的稳定性要求。如果你只是需要一个快速的解决方案来从代码中得到任何东西,并且它正在工作,那么为什么不呢?如果你正在做一个你不能控制输入的应用程序,也许在这种情况下最好不要使用正则表达式。
正则表达式是一种快速的方法,它只适用于某些用例,但不是所有用例。话虽如此,每个人都可以选择他/她自己,但一般拒绝regex似乎有点太多了。
对于我的情况下,我能够迅速得到我需要的链接与此查询,但似乎并不是每个人都喜欢这个解决方案。在解析了我自己的网站上的所有内容后,我将排出脚本。但为了达到这个目的,它可以很好地获得相对和绝对链接:

function getPicPath($sSource){
    // returns array with absolute and relative links to pictures.
    preg_match_all('/([-a-z0-9_\/:.]+\.(jpg|jpeg|png))/i', $sSource, $matches);
    return $matches;
}

下面是如何处理它们:

$aPics = getPicPath($urlcontent);  
    $num_pics = count($aPics[0]);
    foreach ($aPics [0] as &$sTemp2) {
        echo '<br>Count '.$num_pics.' <a href="'.$sTemp2.'"target="_blank">'.$sTemp2.'</a><br>';
    }

这不是每一个目的,但我用它做的是将它们存储在数据库中,以便稍后转换为webp。未来的图片将被转换为webp只是当上传,但为了转换以前的图片,我需要确定他们。这个很好用。

相关问题