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 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
在PHP中读取和写入WORD文档的代码
Apr 09 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
Apr 19 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
php制作简单模版引擎
Apr 07 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
Aug 11 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短网址的生成代码(仿微博短网址)
2014/05/07 PHP
php内嵌函数用法实例
2015/03/20 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
js 替换
2008/02/19 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
志愿者活动总结
2014/04/28 职场文书
珍惜资源的建议书
2014/08/26 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
大国崛起日本观后感
2015/06/02 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
MySQL去除密码登录告警的方法
2022/04/20 MySQL