提问人:Trafficsek 提问时间:11/18/2023 最后编辑:Chris HaasTrafficsek 更新时间:11/18/2023 访问量:44
将标签 img-responsive 添加到 <img>
Add tag img-responsive to <img>
问:
我需要编写一个脚本,将向 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'])
);
答:
0赞
TSCAmerica.com
11/18/2023
#1
这似乎是您和属性的问题,希望以下帮助:regex
class
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">
评论