Filter all html output

时间:2012-05-21 作者:pixeline

我想确保没有电子邮件地址发布在平原。所以我开发了一个插件,用spambot安全的替代品替换所有电子邮件地址。

但是一些用户将他们的电子邮件地址放在他们的博客标题中,在帖子循环之外。如何捕获和过滤这些信息?

这项工作:

        add_filter(\'the_content\', array(&$this,"pep_replace"));
        add_filter(\'the_excerpt\', array(&$this,"pep_replace_excerpt"));
        add_filter(\'the_comments\', array(&$this,"pep_replace"));
这不会(它不会捕获我在test-theme header.php文件中添加的电子邮件地址)。

add_filter(\'template\',  array(&$this,"pep_replace"));
add_filter(\'wp_head\',  array(&$this,"pep_replace"));
add_filter(\'shutdown\',  array(&$this,"pep_replace"));
我正在深入研究钩子文档,但我不知道什么是正确的过滤器钩子。感谢您抽出时间。

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

你不能保护用户所做的一切。如果他们在主题的页脚/页眉/侧边栏中硬编码电子邮件地址,会怎么样?捕获和转义的唯一方法是使用输出缓冲。。。这可能会成为性能的噩梦。

我的建议是做两件事:

抓住所有有意义的地方提供了可访问的功能,允许人们逃离自己的内容您已经大致涵盖了步骤1。电子邮件地址最常出现在帖子内容中(the_contentthe_excerpt) 但也可能出现在评论中。我还建议过滤侧栏小部件的标题和内容:

add_filter(\'the_title\', array(&$this,"pep_replace"));
add_filter(\'widget_content\', array(&$this,"pep_replace"));
对于步骤2,记录一个通用函数,人们可以使用该函数来清理他们的电子邮件地址:

function sanitize_email( $email ) {
    // do stuff
    return $sanitized_email;
}
然后,用户可以使用此选项,而不是对其电子邮件地址进行硬编码:

<p>Please contact me at <?php echo sanitize_email( \'[email protected]\' ); ?>.</p>
如果你还没有过滤the_content, 我建议您也创建一个短代码。。。但这有点多余。

Be very careful

您列出的其他三个挂钩实际上不是过滤器,它们是动作挂钩。它们是代码中可以挂接自己的逻辑方法的地方。与过滤器不同,它们不return PHP的任何内容。。。所以当用作过滤器时,它们是毫无意义的。

SO网友:T.Todua

Manual method:

add_action(\'wp_loaded\', \'buffer_start\');    function buffer_start() { ob_start("myy_callback"); }
add_action(\'shutdown\', \'buffer_end\');       function buffer_end()   { ob_end_flush(); }


function myy_callback($buffer) {
  // modify buffer here, and then return the updated code
  $buffer = str_replace(\'MERCEDES\',\'FERRARI\',$buffer);
  return $buffer;
}
结束

相关推荐

调用Function_Exist()比调用Apply_Filters()快还是慢

调用函数\\u exists()时,应用\\u filters()的速度是快还是慢。。。还是差异太小,不应该考虑?我在Kaiser的基础上做了一些测试,结果表明,在同时存在函数和过滤器的情况下,function\\u exists()的速度大约是3倍。如果过滤器不存在,速度将提高约11倍。没想到会这样。function taco_party() { return true; } add_filter( \'taco-party\', \'taco_party\'