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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
Sep 11 PHP
apache和php之间协同工作的配置经验分享
Apr 08 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
php缓冲输出实例分析
Jan 05 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
php-fpm服务启动脚本的方法
Apr 27 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 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
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
微信小程序 选项卡的简单实例
2017/05/24 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
python实现合并两个排序的链表
2019/03/03 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
苹果台湾官网:Apple台湾
2019/01/05 全球购物
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
本科生求职简历的自我评价
2013/10/21 职场文书
审计工作个人的自我评价
2013/12/25 职场文书
志愿者活动总结范文
2014/04/26 职场文书
工会趣味活动方案
2014/08/18 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
党员思想汇报材料
2014/12/19 职场文书
活动宣传稿范文
2015/07/23 职场文书
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB