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 相关文章推荐
php5新改动之短标记启用方法
Sep 11 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
Feb 16 PHP
php之Memcache学习笔记
Jun 17 PHP
一个简单的php加密解密函数(动态加密)
Jun 19 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
php简单日历函数
Oct 28 PHP
thinkphp框架下404页面设置 仅三步
May 14 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 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
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
PHP反射机制用法实例
2014/08/28 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
图片自动更新(说明)
2006/10/02 Javascript
js select常用操作控制代码
2010/03/16 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
python实现网页链接提取的方法分享
2014/02/25 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
简单了解python关系(比较)运算符
2019/07/08 Python
python django中8000端口被占用的解决
2019/12/17 Python
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
人事局接收函
2015/01/31 职场文书
建国大业观后感
2015/06/01 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
在Python 中将类对象序列化为JSON
2022/04/06 Python