【问题标题】:How to replace Image 'alt' attribute if its blank?如果图像“alt”属性为空,如何替换它?
【发布时间】:2017-10-29 12:46:47
【问题描述】:

我想替换内容的图像 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 = '<a$1href=$2><img$3alt="Game"></a>';
        $content = preg_replace($pattern, $replacement, $content);
    }

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

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

【问题讨论】:

    标签: php regex wordpress preg-replace alt


    【解决方案1】:

    仅当 alt 为空值时才匹配完整字符串。捕获保持不变的两个部分,并将它们放在$replacement 中默认值“Game”的任一侧:

    方法(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 属性的 &lt;a&gt; 标记,并且该标记也可能有零个或多个其他属性,其中包含一个必须有一个空的 alt 属性并且可能有零个或多个其他属性的 &lt;img&gt; 标记属性。

    如果您不想检查&lt;img&gt; 标记是否嵌套在锚标记中,则可以将正则表达式模式缩减为仅匹配&lt;img&gt; 部分。

    【讨论】:

    • 你能给我解释一下'~(&lt;a.*?href=[^&gt;]*&gt;&lt;img.*?alt=")[^"]{0}("&gt;&lt;/a&gt;)~i';这个代码或任何参考图。
    • @RockySena 我需要更好地改进这种模式。它有效,但我没有时间优化。我现在和我的家人在一起。我会尽快回来。我将包括解释。
    • 谢谢你... mickmackusa
    • @RockySena 模式解释可在 Pattern Demo 链接中找到。
    • 为了记录,在有效的 html 上使用正则表达式并不是最优的。下次在我的办公桌上进行会议时,我将添加一个 domdocument/xpath 解决方案。 (自从这个答案以来,我是一个年纪更大、更聪明的程序员。)
    猜你喜欢
    • 2019-02-14
    • 2021-06-18
    • 1970-01-01
    • 2013-05-16
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多