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 相关文章推荐
SSI指令
Nov 25 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 PHP
php生成随机密码的几种方法
Jan 17 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
php微信开发自定义菜单
Aug 27 PHP
php自定义函数转换html标签示例
Sep 29 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 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图片上传代码
2013/11/04 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
Javascript 继承实现例子
2009/08/12 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
PyQt5实现拖放功能
2018/04/25 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
python动态进度条的实现代码
2019/07/03 Python
django中使用POST方法获取POST数据
2019/08/20 Python
Python新手学习raise用法
2020/06/03 Python
python如何实现图片压缩
2020/09/11 Python
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
大专毕业生自我鉴定
2013/11/21 职场文书
道德模范事迹材料
2014/12/20 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
python flask开发的简单基金查询工具
2021/06/02 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL