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 金额数字转换成英文
May 06 PHP
php学习之流程控制实现代码
Jun 09 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
php中异常处理方法小结
Jan 09 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
php简单实现sql防注入的方法
Apr 22 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 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函数的常用方法及注意之处小结
2011/07/10 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
django使用admin站点上传图片的实例
2019/07/28 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
C++面试题目
2013/06/25 面试题
商场开业庆典策划方案
2014/06/02 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
检讨书模板大全
2015/05/07 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
Nginx域名转发使用场景代码实例
2021/03/31 Servers
golang为什么要统一错误处理
2022/04/03 Golang
SQL Server删除表中的重复数据
2022/05/25 SQL Server