将标签 img-responsive 添加到 <img>

Add tag img-responsive to <img>

提问人:Trafficsek 提问时间:11/18/2023 最后编辑:Chris HaasTrafficsek 更新时间:11/18/2023 访问量:44

问:

我需要编写一个脚本,将向 HTML 图像添加一个 img 响应类。

所以在HTML代码中: a) 它将搜索是否有任何带有 class 选项的标签,如果有,它会将其添加到当前的 img-responsive 类中 b)如果图片没有类,我们只添加一个具有 img-responsive 的类。<img>

有谁知道该怎么做?

我当前的代码(它不起作用):

function addImgResponsiveClass($matches) {
            if (!empty($matches[2])) {
                $replacement = $matches[1] . 'class="' . $matches[2] . ' img-responsive"' . $matches[3];
            } else {
                $replacement = $matches[1] . 'class="img-responsive"' . $matches[2] . $matches[3];
            }
            return $replacement;
        }
        
        $txtD = preg_replace_callback(
            '/(<img\s+)(class="([^"]*)"\s*)?(.*?>)/i',
            'addImgResponsiveClass',
            dynamicCaption($dataArray[0]['content_pl'])
        );
PHP的

评论


答:

0赞 TSCAmerica.com 11/18/2023 #1

这似乎是您和属性的问题,希望以下帮助:regexclass

function addImgResponsiveClass($matches) {
    if (!empty($matches[2])) {
        $replacement = $matches[1] . 'class="' . trim($matches[2]) . ' img-responsive"' . $matches[4];
    } else {
        $replacement = $matches[1] . 'class="img-responsive" ' . $matches[4];
    }
    return $replacement;
}

$txtD = preg_replace_callback(
    '/(<img\s+)(class="([^"]*)"\s*)?(.*?>)/i',
    'addImgResponsiveClass',
    dynamicCaption($dataArray[0]['content_pl'])
);
1赞 Markus Zeller 11/18/2023 #2

完全不要使用正则表达式。这不是操作和解析 HTML 的正确工具。

注意:LoadHTML() 仅在存在根元素时才有效。在这种情况下,没有,所以我创建 html 作为包装器并在输出时将其删除。如果您有一个完整的 HTML 文件,您可以省略该步骤。

$html = <<<'_HTML_'
<img alt="no class">
<img class="" alt="empty class">
<img class="lazyload" alt="lazyload">
_HTML_;

libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML('<html>' . $html . '</html>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

foreach ($dom->getElementsByTagName('img') as $image) {
    $class = $image->getAttribute('class') ?? '';
    $image->setAttribute('class', ltrim($class . ' img-responsive'));
}

echo str_replace(['<html>', '</html>'], '', $dom->saveHTML());
<img alt="no class" class="img-responsive">
<img class="img-responsive" alt="empty class">
<img class="lazyload img-responsive" alt="lazyload">