WordPress筛选器中REGEX的奇怪行为(试图隐藏emtpy段落)

时间:2019-10-24 作者:Alex

我一直试图在Wordpress中添加一个过滤器来抑制空段落。我在网上找到了许多备选方案(这里是其中之一https://gomakethings.com/remove-empty-paragraphs-added-by-wordpress/ ) 但是,到目前为止,他们都失败得很惨。在检验各种假设后,我发现这种奇怪的正则表达式行为正在发生:

我自己创建并测试了这个小脚本(它所做的只是用破折号替换空格):

<?php 
$content = \'abc def\';
$patterns = array(\'#\\s#\');
$replacements = array(\'-\');
$new_content = preg_replace($patterns, $replacements, $content); 
echo $new_content;
可预见的结果是:

abc-def
然后我在wordpress中添加了与过滤器相同的代码:

add_filter(\'the_content\', array($this,\'empty_paragraph_fix\'),20,1);
function empty_paragraph($content) {
    $patterns = array(\'#\\s*#\');
    $replacements = array(\'-\');
    $content = preg_replace($patterns, $replacements, $content);
    return $content;
}
但这次它给了我一些非常奇怪的结果。在最初包含以下内容的内容上:

<div class="campus-list">
<ul class= ...
它返回了以下内容:

-<-d-i-v--c-l-a-s-s-=-"-c-a-m-p-u-s---l-i-s-t--"-->--<-u-l--c-l-a-s-s-=-
我错过了什么?你见过这样的事吗?

1 个回复
SO网友:Jonathan Brinley

在第一个示例中,您的正则表达式是\\s, 将匹配空白字符。在第二个示例中,您有\\s*, 将匹配零个或多个空白字符。你可能在找\\s+, 一个或多个空白字符。

相关推荐

为内置钩子调用do_action和Apply_Filters是否安全?

我正在开发一个插件,它需要复制一些内置的WordPress逻辑。(此逻辑不能用任何内置方法调用,也不能独立连接到。)在这个动作序列中,WordPress的正常行为是调用动作挂钩(do_action(\'wp_login\', ...)) 和过滤器挂钩(apply_filters(\'login_redirect\', ...)).如果在对应于在Core中调用它们的时间点调用它们,那么直接从我的插件调用这些内置钩子是否安全(并且是可以接受的做法)?或者,其他与此相关的开发人员期望在非常特定的时间执行操作的风