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 远程关机实现代码
Nov 10 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 PHP
为你总结一些php信息函数
Oct 21 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
CI配置多数据库访问的方法
Mar 28 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
Zend Framework实现自定义过滤器的方法
Dec 09 PHP
总结一些PHP中好用但又容易忽略的小知识
Jun 02 PHP
PHP实用小技巧之调用录像的方法
Dec 05 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
pyramid配置session的方法教程
2013/11/27 Python
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python打包可执行文件的方法详解
2016/09/19 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
十八大标语口号
2014/10/09 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
人工作失职检讨书
2015/05/05 职场文书
社区志愿服务活动感想
2015/08/07 职场文书