使用 PHP 从背景图像样式属性中提取值

问题描述 投票:0回答:1

我有以下HTML代码:

<div class="article__img has-caption" style="background-image: url('img/main/article-plug.png')" >

我正在尝试提取图像 URL 并将其替换为另一个(例如 img/main/article-plug.webp),但我被 XPath 查询困住了,不知道该怎么做。

提前感谢您的帮助!

那是我最后的代码(但它还没有返回任何东西):

$domDocument = new DOMDocument();
$domDocument->loadHTML($article["DESCRIPTION"]);

$domXPath = new DOMXPath($domDocument);

$img = $domXPath->query('substring-before(substring-after(//div[@class=\'article__img has-caption\']/@style, "background-image: url(\'"), "\')")');  
php xpath domdocument
1个回答
1
投票

使用 DOM 解析器从给定的 HTML 代码中提取图像 URL:

$dom = new DOMDocument();
$dom->loadHTML($html);
$divs = $dom->getElementsByTagName('div');
foreach ($divs as $div) {
    if ($div->getAttribute('class') === 'article__img has-caption') {
        $style = $div->getAttribute('style');
        preg_match('/url\((.*?)\)/', $style, $matches);
        $imageUrl = $matches[1];
        $newImageUrl = 'img/main/article-plug.webp';
        $newStyle = str_replace($imageUrl, $newImageUrl, $style);
        $div->setAttribute('style', $newStyle);
    }
}
$newHtml = $dom->saveHTML();
echo $newHtml; // output: <div class="article__img has-caption" style="background-image: url('img/main/article-plug.webp')" >

此代码首先将 HTML 加载到 DOM 对象中,找到类为“article__img has-caption”的 div,从其样式属性中提取图像 URL,将其替换为新的图像 URL,更新 div 的样式属性,最后用更新后的图片 URL 生成新的 HTML。

© www.soinside.com 2019 - 2024. All rights reserved.