2

如何搜索和替换字符串中所有出现的单词或短语,除非它位于 HTML 标记中?

目前有这个:

<?php
        public function add_acronyms($content){
            if(strpos($content, get_bloginfo('description')) !== false){
                $content = str_replace(get_bloginfo('description'), '<acronym title="'.get_bloginfo('name').'">'.get_bloginfo('description').'</acronym>', $content);
                if(strpos($content, '="<acronym title="'.get_bloginfo('name').'">'.get_bloginfo('description').'</acronym>') !== false){
                    $content = str_replace('="<acronym title="'.get_bloginfo('name').'">'.get_bloginfo('description').'</acronym>', get_bloginfo('description'), $content);
                }
            }
            return $content;
        }
?>

但这只有在 HTML 属性的开头找到单词或短语时才有效。

4

1 回答 1

2

在寻找类似的东西时发现了这个。我的回答不是完成它的最优雅的方式,但它可能会帮助你 - 我的问题和答案在这里 - 但是如上所述,几乎可以肯定有更好的方法来实现这一点 在我的例子中,尝试替换一个单词会破坏一些href 标签,所以我使用了以下代码(顺便说一下,这是在 Wordpress 中)

function replace_text_wps($text){
    $replace = array(
        // used mid-line
        ' YOUR_TEXT ' => ' <span class="YOUR_CLASS">YOUR_TEXT</span> ',
        ' YOUR_TEXT ' => ' <span class="YOUR_CLASS">YOUR_TEXT</span> ',
        ' YOUR_TEXT ' => ' <span class="YOUR_CLASS">YOUR_TEXT</span> ',
        // used at end of lines
        ' YOUR_TEXT' => ' <span class="YOUR_CLASS">YOUR_TEXT</span>',
        ' YOUR_TEXT' => ' <span class="YOUR_CLASS">YOUR_TEXT</span>',
        ' YOUR_TEXT' => ' <span class="YOUR_CLASS">YOUR_TEXT</span>',
        // used inside html tags like headers
        '>YOUR_TEXT' => '><span class="YOUR_CLASS">YOUR_TEXT</span>',
        '>YOUR_TEXT' => '><span class="YOUR_CLASS">YOUR_TEXT</span>',
        '>YOUR_TEXT' => '><span class="YOUR_CLASS">YOUR_TEXT</span>',
        //used directly after html tags
        '> YOUR_TEXT' => '> <span class="YOUR_CLASS">YOUR_TEXT</span>',
        '> YOUR_TEXT' => '> <span class="YOUR_CLASS">YOUR_TEXT</span>',
        '> YOUR_TEXT' => '> <span class="YOUR_CLASS">YOUR_TEXT</span>',
        //exclude alt tags on images, title attributes etc
        '"YOUR_TEXT' => '"YOUR_TEXT',
        'YOUR_TEXT"' => 'YOUR_TEXT"',
        '"YOUR_TEXT' => '"YOUR_TEXT',
        'YOUR_TEXT"' => 'YOUR_TEXT"'
    );
    $text = str_replace(array_keys($replace), $replace, $text);
    return $text;
}
add_filter('the_content', 'replace_text_wps');
add_filter('the_excerpt', 'replace_text_wps');
add_filter('the_title', 'replace_text_wps');

排除 str_replace 中的 html 属性

于 2017-06-07T11:22:45.153 回答