WP_NEW_COMMENT是否需要使用HTML格式的注释?

时间:2018-08-29 作者:Flimm

如果comment_content 在本例中,是否包含HTML?还是应该包含纯文本?

$comment_id = wp_new_comment([
    \'comment_post_ID\' => 1,
    \'comment_content\' => \'Tom & Jerry\', // or should this be \'Tom & Jerry\'?
    \'comment_type\' => \'\',
    \'user_id\' => 1,
    // etc
]);
为完整起见,这是否适用于wp_insert_comment

1 个回复
SO网友:Jacob Peattie

还是应该是“汤姆&;杰瑞?

这并不重要。如果您不知道评论内容来自何处,则更重要的是要考虑。如果要插入用户输入作为注释内容,则应转义。

wp_new_comment() 为您转义并清理评论。它的设计目的是直接从评论表单中获取用户输入,并在将其传递给wp_insert_comment().

因此,这包括对HTML实体进行编码(转换&&) 并过滤掉不允许的HTML。它还可以将评论者的IP地址添加到评论中。

所以当使用wp_new_comment() 您不需要进行任何转义,只需输入与用户相同的注释,但有一个重要的例外。

二者都wp_new_comment()wp_insert_comment() 预期数据将被斜切。WordPress自动运行addslashes() 关于中的所有内容$_POST, $_GET$_REQUEST 这些函数期望数据被删减,因为它们使用来自这些变量的数据。

因此,如果要插入的注释的任何数据包含引号或斜杠,则需要使用斜杠wp_slash() 插入前:

$args = [
    \'comment_post_ID\' => 1,
    \'comment_content\' => \'Tom\\\'s a cat\',
    \'comment_type\' => \'\',
    \'user_id\' => 1,
];

$comment_id = wp_new_comment( wp_slash( $args ) );
请注意,我已经添加了斜杠,Tom\\\'s 是为了PHP而转义的,仍然需要删减。

愚蠢的是wp_insert_comment() 是它运行wp_unslash(). 因此,我们添加斜杠只是为了立即删除它们。但为了与$_POST 变量,以便可能是内容一部分的斜杠不会被错误删除。

结束

相关推荐

Simple comments spam solution

我想实施一个解决方案,打击评论垃圾邮件和方法很简单。我想,每一个评论,有“网站”字段填写被自动标记为垃圾邮件。此外,在提交之前或之后,应显示一条小警告,告知用户如果使用“网站”字段,其邮件将被标记为垃圾邮件<;这不是强制性的实现这一目标的最佳方法是什么?