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的FTP学习(一)
Oct 09 PHP
php二维数组排序与默认自然排序的方法介绍
Apr 27 PHP
PHP中判断变量为空的几种方法分享
Aug 26 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
php伪静态之APACHE篇
Jun 02 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
PHP编程基本语法快速入门手册
Jan 07 PHP
Yii控制器中操作视图js的方法
Jul 04 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 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 strtr() 函数使用说明
2008/11/21 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
用Python编写简单的定时器的方法
2015/05/02 Python
python实现多线程的两种方式
2016/05/22 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
酒店员工职业生涯规划
2014/02/25 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS