PHP中使用strpos函数实现屏蔽敏感关键字功能


Posted in PHP onAugust 21, 2014

现在网络信息监管很严格,特别是屏蔽关键字。特别是现在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<$k;$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

/**

 * 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<$k;$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<$k;$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 '恭喜!通过关键字检测';

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

}
PHP 相关文章推荐
收藏的一个php小偷的核心程序
Apr 09 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
深入PHP变量存储的详解
Jun 13 PHP
php版小黄鸡simsimi聊天机器人接口分享
Jan 26 PHP
php+mysql结合Ajax实现点赞功能完整实例
Jan 30 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
php arsort 数组降序排序详细介绍
Nov 17 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
php实现断点续传大文件示例代码
Jun 19 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 #PHP
PHP实现的多彩标签效果代码分享
Aug 21 #PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 #PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 #PHP
个人写的PHP验证码生成类分享
Aug 21 #PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 #PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 #PHP
You might like
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
python安装与使用redis的方法
2016/04/19 Python
Python实现读取json文件到excel表
2017/11/18 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
高一家长会邀请函
2014/01/12 职场文书
节约用水标语
2014/06/11 职场文书
HR求职自荐信范文
2014/06/21 职场文书
镇创先争优活动总结
2014/08/28 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
综合实践活动报告
2015/02/05 职场文书
中国世界遗产导游词
2015/02/13 职场文书
青年教师听课心得体会
2016/01/15 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
Ruby处理CSV数据方法详解
2022/04/18 Ruby
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL
Android studio 简单计算器的编写
2022/05/20 Java/Android
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server