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+mysql扎实个人基本功
Mar 27 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
用PHP将网址字符串转换成超链接(网址或email)
May 25 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 PHP
PHP对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
PHP的拦截器实例分析
Nov 03 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 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新手上路(五)
2006/10/09 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
js或css实现滚动广告的几种方案
2010/01/28 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
详解React 16 中的异常处理
2017/07/28 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
vue使用recorder.js实现录音功能
2019/11/22 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
使用Python实现简单的服务器功能
2017/08/25 Python
python递归函数绘制分形树的方法
2018/06/22 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
全球性的在线商店:Vogca
2019/05/10 全球购物
小学清明节活动方案
2014/03/08 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
会计师事务所实习证明
2014/11/16 职场文书
事业单位年度考核评语
2014/12/31 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
网络舆情信息简报
2015/07/21 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
送给客户微信问候语!
2019/07/04 职场文书