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之第八天
Oct 09 PHP
人大复印资料处理程序_补充篇
Oct 09 PHP
php+html5使用FormData对象提交表单及上传图片的方法
Feb 11 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
php格式化时间戳
Dec 17 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
PHP写的简单数字验证码实例
May 23 PHP
PHP sdk文档处理常用代码示例解析
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通过COM使用ADODB的简单例子
2006/12/31 PHP
php自动跳转中英文页面
2008/07/29 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
PHP静态文件生成类实例
2014/11/29 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python 回调函数和回调方法的实现分析
2016/03/23 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
python实现一个猜拳游戏
2020/04/05 Python
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
办公室文书岗位职责
2013/12/16 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
针对吵架老公保证书
2015/05/08 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技