1.一般方法

function transgress_keyword($content){//定义处理违法关键字的方法
	$keyword = array ('明日', '编程', '图书', '软件' );//定义敏感词
	$m = 0;
	for($i = 0; $i < count ( $keyword ); $i ++) {//根据数组元素数量执行for循环
		//应用substr_count检测文章的标题和内容中是否包含敏感词
		if (substr_count ( $content, $keyword [$i] ) > 0) {
			$m ++;
		}
	}
	return $m;	//返回变量值,根据变量值判断是否存在敏感词
if (transgress_keyword($_POST[title])> 0 || transgress_keyword($_POST[content])> 0 ) {//判断返回值大于0说明包含敏感词
	echo "<script>alert('您输入的内容中含有敏感词'); history.back();</script>";
}

2.高效方法

效率对比(12688个字符,替换1次):

str_replace: 0.109937906265秒

strtr: 0.0306839942932秒

替换结果对比

比如:「张三」、「张三丰」、「张三丰田」 均为违禁词 (为何会有这样的区分?请参见 「法X」、「法Xgong」)

原文:「我今天开着张三丰田去上班 」

strtr:「我今天开着****去上班 」(四个词均替换为了*)

str_replace:「我今天开着**丰田去上班 」(仅仅替换了第一个匹配项)

所以使用str_replace替换,是不能本质上解决问题。

时间对比:

关键词数量:6712 (无重复)

<?php
//badword.php
$badword = array( '张三','张三丰','张三丰田');
?>
<?php
//demo.php
require('badword.php');
$badword1 =array_combine($badword,array_fill(0,count($badword),'*'));
$bb = '我今天开着张三丰田上班';
$str = strtr($bb,$badword1);
echo $str;
?>

测试结果:我今天开着*上班

分析:strtr函数比str_replace和正则的效率高。