php 敏感关键词检测,PHP中使用strpos函数实现屏蔽敏感关键字功能

现在网络信息监管很严格,特别是屏蔽关键字。特别是现在WEB2.0时代,网站的内容几乎都是来自网民发布,站长管理即可。如果你希望别人在你站点禁止发布某个关键字,那么就需要预先做处理。用PHP做关键字屏蔽的功能样式有多种多样,如正则是最普遍的一种,这里就不一一例举,本文介绍使用PHP函数strpos屏蔽关键字的功能。

思路:

一、把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少。

二、PHP读取关键字文本,存入一个数组

三、遍历关键字数组,挨个用strpos函数去看看内容有没有关键字,如果有,返回true,没有则返回false。

PHP代码如下:

/**

* PHP中用strpos函数过滤关键字

* 脚本之家

*/

// 关键字过滤函数

function keyWordCheck($content){

// 去除空白

$content = trim($content);

// 读取关键字文本

$content = @file_get_contents('keyWords.txt');

// 转换成数组

$arr = explode("\n", $content);

// 遍历检测

for($i=0,$k=count($arr);$i

// 如果此数组元素为空则跳过此次循环

if($arr[$i]==''){

continue;

}

// 如果检测到关键字,则返回匹配的关键字,并终止运行

if(@strpos($str,$arr[$i])!==false){

//$i=$k;

return $arr[$i];

}

}

// 如果没有检测到关键字则返回false

return false;

}

$content = '这里是要发布的文本内容。。。';

// 过滤关键字

$keyWord =  keyWordCheck($content);

// 判断是否存在关键字

if($keyWord){

echo '你发布的内容存在关键字'.$keyWord;

}else{

echo '恭喜!通过关键字检测';

// 往下可以进行写库操作完成发布动作。

}

写完代码后,故意在变量$content中写了一个关键字内容,然后运行发现没有检测到关键字,执行结果是通过,换成其它禁止的关键字都通过。

郁闷,开始判断是不是哪里出问题。

编码问题? 立即把keyWord.txt文件再次用记事本打开,然后另存为UTF-8格式。结果还是不行。

没有获取到keyWord.txt文本内容? 立即 print_r() 发现正常读取并按行转成了数组。

于是,我把关键字数组直接声明写成死的在程序中:

/**

* PHP中用strpos函数过滤关键字

* 脚本之家

*/

// 关键字过滤函数

function keyWordCheck($content){

// 去除空白

$content = trim($content);

// 读取关键字文本

//$content = @file_get_contents('keyWords.txt');

// 转换成数组

//$arr = explode("\n", $content);

// 直接在程序中声明关键字数组

$arr = array('关键字1','关键字2','关键字3','关键字4'...);

// 遍历检测

for($i=0,$k=count($arr);$i

// 如果此数组元素为空则跳过此次循环

if($arr[$i]==''){

continue;

}

// 如果检测到关键字,则返回匹配的关键字,并终止运行

if(@strpos($str,$arr[$i])!==false){

//$i=$k;

return $arr[$i];

}

}

// 如果没有检测到关键字则返回false

return false;

}

$content = '这里是要发布的内容,含有关键字2';

// 过滤关键字

$keyWord =  keyWordCheck($content);

// 判断是否存在关键字

if($keyWord){

echo '你发布的内容存在关键字【'.$keyWord.'】';

}else{

echo '恭喜!通过关键字检测';

// 往下可以进行写库操作完成发布动作。

}

// 程序运行结果:你发布的内容存在关键字【关键字2】

// 程序正常

如果在PHP中声明关键字数组,就能起到作用,如果读取文本文件就无效,见鬼了?

正在百思不得其解之时,想到了会不会是从文本文件中读取的内容有空格或者换行符没有过滤所导致?于是在遍历匹配那里加了一个trim函数。

加了trim()函数过滤空白后运行通过测试,原来瞎折腾了半天问题就在这里。

/**

* PHP中用strpos函数过滤关键字

* 脚本之家

*/

// 关键字过滤函数

function keyWordCheck($content){

// 去除空白

$content = trim($content);

// 读取关键字文本

$content = @file_get_contents('keyWords.txt');

// 转换成数组

$arr = explode("\n", $content);

// 遍历检测

for($i=0,$k=count($arr);$i

// 如果此数组元素为空则跳过此次循环

if($arr[$i]==''){

continue;

}

// 如果检测到关键字,则返回匹配的关键字,并终止运行

// 这一次加了 trim()函数

if(@strpos($str,trim($arr[$i]))!==false){

//$i=$k;

return $arr[$i];

}

}

// 如果没有检测到关键字则返回false

return false;

}

$content = '这里是要发布的文本内容。。。';

// 过滤关键字

$keyWord =  keyWordCheck($content);

// 判断是否存在关键字

if($keyWord){

echo '你发布的内容存在关键字'.$keyWord;

}else{

echo '恭喜!通过关键字检测';

// 往下可以进行写库操作完成发布动作。

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值