2017-05-29 41 views
1

我想替换内容的图像alt标签。所以我用preg_replace如何替换图像'alt'属性,如果它的空白?

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

它的工作很好,但问题是,这种代码替换alt标签,如果它已经有数据。

任何人都可以请指导我如何检查ALT标记是否为空,然后根据它替换它的数据。

回答

1

只有当alt具有空值时才匹配fullstring。夺两个部分保持不变,并把它们放在你的默认值 “游戏” 的任一侧$replacement

方法(Demo):

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

输入/输出:

$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>标签, o具有零个或多个其他属性,其中包含<img>标记,该标记必须具有空的alt属性,并且可能具有零个或多个其他属性。

如果您不在意检查<img>标记是否嵌套在锚标记中,那么可以将正则表达式模式减少为仅匹配<img>部分。

+0

你能否请我解释一下''〜(] *>)〜';'这段代码或任何引用的内容。 –

+0

@RockySena我需要更好地完善这种模式。它有效,但我没有时间进行优化。我现在和我的家人在一起。我会尽快回来。我会包括解释。 – mickmackusa

+0

谢谢...... mickmackusa –