使用preg_replace过滤不起作用的HTML标签

时间:2018-10-16 19:35:14

标签: filter hook

我有一些帖子(在后端的实际帖子文本中)有一些错误的<strong> </strong>条目。我试图在将它们呈现为HTML之前将其过滤掉。 (请注意,我确实也有适当的标签,例如我需要保留的<strong>This Is a Title</strong>)。

我已经创建了一个过滤器,但似乎无法使测试条正常工作

add_filter( 'the_content', 'filter_test');
function filter_test($content){
  global $post;
  $post_slug = $post->post_name;
  if (get_post_type() == "post" && $post_slug != "allposts") {
    $content = preg_replace("/<strong>\s+<\/strong>/",'',$content); // THIS LINE
    $content = preg_replace("/&nbsp;|^\s*$/",'',$content);
    return $content;
  }
  return $content;
}

它仍然保留在“空” <strong>标记中。据我所知,我有正确的正则表达式模式<strong>\s+<\/strong>(并在其周围加上了/,因为这似乎是PHP的方式)。

如何删除/过滤空标签(<strong> </strong>),但保留“已填充”标签(<strong>Words here</strong>)?

编辑:呈现页面时一些HTML代码的快照:

<p>USA is a country</p>
<p><strong> </strong></p>
<p><strong>then there are some words here.</strong></p>
<p><strong> </strong></p>

我正在尝试删除第二行和第四行。从技术上来说,我现在想删除空的<p></p>,但我希望该解决方案适用于任何HTML标记。

1 个答案:

答案 0 :(得分:1)

尝试str_replace

add_filter( 'the_content', 'filter_test');
function filter_test($content){
    global $post;
    $post_slug = $post->post_name;
    if (get_post_type() === 'post' && $post_slug != 'allposts') {
        $content = str_replace(array(<strong></strong>","<strong> </strong>"),'',$content); // THIS LINE
        $content = preg_replace("/&nbsp;|^\s*$/",'',$content);
        return $content;
    }
    return $content;
}

将删除内容中的以下内容:

<strong></strong>
<strong> </strong>