preg_match_all for links to JPG/PNG



我试图找到指向JPEG/PNG图像的链接。我有搜索没有文件扩展名检查的链接,它可以正常工作:

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

,但是现在我试图为PNG/JPG添加过滤器:(您能帮我吗?..

由domdocument解决:

$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');
    }
}

这是回答问题的另一个贡献:如何从CSS文件中的图像,字体等获取URL路径?

编辑:是的,正则是将问题引起的问题,例如尝试替换嵌套的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,但是为了转换以前的图片,我需要识别它们。而且这很好。

最新更新