Drupal 7 开发内部培训资料, 分头诗人

hook_comment_presave这个钩子合适吗?

赞成!
0
否决!

我在做敏感字过滤的功能,遇上一点小麻烦

function word_filter_comment_presave($comment) {
     $subject = $comment->subject;
     $body = $comment->comment_body ['und'] [0] ['value'];

     …………


      if(preg_match("/$str_forbid/", $subject) || preg_match("/$str_forbid/", $body)){
		drupal_set_message(t('有不对的词语'),'error');
		return;
	}
}


测试的时候发现照样发表出来了,并没有真正挡住。

我想实现以下两种情况: 1,评论有敏感词时,会直接挡住不入库。上面的问题就是这种。 2,评论有敏感词时,可以插入库,但是不发表。 请问怎么解决呢?谢谢。

3 个回答

赞成!
0
否决!

是不是正则表达式错了?

preg_match("/^str_forbid/", $subject) 

这样?

赞成!
0
否决!

不是哦~~~$str_forbid是一个变量来的

它的值应该是这样子

a|b|c|d

赞成!
0
否决!

function textdrupal_comment_presave($comment) {
// Reindex the node when comments are added.
if (is_file("./filterwords.txt")){ //判断给定文件名是否为一个正常的文件
//watchdog('打印',var_export($comment->comment_body['und'][0]['value'],true));
$filter_word = file("./filterwords.txt"); //把整个文件读入一个数组中
//var_dump($filter_word);die();
$str = $comment->comment_body['und'][0]['value'];
for($i=0;$i if(preg_match("/".trim($filter_word[$i])."/i",$str)){ //应用正则表达式,判断传递的留言信息中是否含有敏感词
$comment->status = 0;
form_set_error('',"");
break;
}
}
}
}