清理帖子内容以在电子邮件中使用

时间:2012-04-07 作者:Simon Blackbourn

我正在以纯文本电子邮件的形式发送自定义帖子类型的内容(这是为了将比赛条目发送给评委小组),因此我需要确保$post->post_content 首先正确消毒。

是否有一个过滤器可以用于此,或者如果没有,我需要做什么消毒?

更新:我刚刚发现wp_strip_all_tags 在里面wp-includes/formatting.php, 这就是我需要的吗?

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

您将要使用sanitize_email(); 具体如下:

return( sanitize_email( $email ) );
这是Codex链接,您可以使用它:http://codex.wordpress.org/Function_Reference/sanitize_email

干杯

SO网友:butlerblog

我不知道为什么这里被接受的答案被接受了,因为它实际上是行不通的。

OP是如何清理电子邮件content. sanitize_email() 清理电子邮件address. 当然,它不会抛出错误,但实际上不会do 任何东西

要清理内容,取决于内容的实际意图,以确定合适的内容。

一种普遍的可能性是sanitize_textarea_field. 这是针对HTML文本区域字段的,但它将保留换行符。它将删除所有标签。

但是,如果电子邮件是HTML格式的,那么您不想删除所有标记。在这种情况下,您可能希望使用一些允许您需要的标记的东西,但会去掉不允许的标记。为此,请使用wp_kses().

使用wp_kses() 要清理HTML电子邮件内容,请将内容和包含允许标记的数组传递给函数:

$allowed_tags = array(
  \'p\' => array(
    \'id\' => array(),
    \'class\' => array(),
  ),
  \'a\' => array(
    \'href\' => array(),
    \'title\' => array()
  ),
  \'br\' => array(),
  \'em\' => array(),
  \'strong\' => array(),
);

$sanitized_content = wp_kses( $post->post_content, $allowed_tags );
上述方法的一个简化变体是wp_kses_post(). 此函数预设了允许的标记,这使得它更容易,因为您不必定义允许的标记和属性。这主要是帖子内容允许的内容。

$sanitized_content = wp_kses_post( $post->post_content );
如果它是常规的帖子内容,那么它可能已经经历了这个过程。如果是自定义帖子类型,则视情况而定。

那么你应该用哪一个呢?正如我在开头提到的,这取决于内容和使用方式。如果是纯文本,请使用一些可以去除所有标记的内容。如果是HTML,请使用wp_kses() 或变体。

请参阅中有关消毒的相关信息the WP Codex.

结束

相关推荐

New post email alert

我想显示一个复选框,其中包含通过电子邮件订阅网站的选项我看到一个wordpress博客,上面的复选框旁边有以下标签通过电子邮件订阅此网站问题是我找不到显示它的插件:我尝试了Subscribe2、Post Notification和Gurken进行评论订阅。你知道我需要安装什么插件吗?