如果 Image 'alt' 属性为空,如何替换它?

How to replace Image 'alt' attribute if its blank?

我想替换内容的图像 alt 标签。所以我用了preg_replace

add_filter('the_content', 'click_to_expand_gallery');
function click_to_expand_gallery($content) {
        $pattern ='~<a(.*?)href=(.*?)><img(.*?)alt="(.*?)"></a>~i';
        $replacement = '<ahref=><imgalt="Game"></a>';
        $content = preg_replace($pattern, $replacement, $content);
    }

它工作正常,但问题是,如果该代码已经有数据,它会替换 alt 标签。

谁能指导我如何检查alt标签是否为空,然后根据它替换它的数据。

仅当alt 为空值时才匹配全字符串。捕获保持不变的两个部分并将它们放在 $replacement:

中默认值 "Game" 的任一侧

方法(Demo):

$pattern ='~(<a.*? href=[^>]*><img.*? alt=")("[^>]*></a>)~i';
$replacement = 'Game';
$content = preg_replace($pattern, $replacement, $content);
echo $content;

Input/Output:

$content='<a href="something.com"><img src="blah.jpg" alt=""></a>';
// output: <a href="something.com"><img src="blah.jpg" alt="Game"></a>

$content='<a href="something.com"><img src="blah.jpg" alt="Not Empty"></a>'; 
// output: <a href="something.com"><img src="blah.jpg" alt="Not Empty"></a>

Pattern Demo

现在,这从字面上匹配了一个带有 href 属性的 <a> 标签,它也可能有零个或多个其他属性,包含一个必须有空 alt<img> 标签属性,并且可能具有零个或多个其他属性。

如果您不关心检查 <img> 标签是否嵌套在锚标签中,则可以将正则表达式模式简化为仅匹配 <img> 部分。