PHP中使用strpos函数实现屏蔽敏感关键字功能

所属分类: 网络编程 / PHP编程 阅读数: 1876
收藏 0 赞 0 分享

现在网络信息监管很严格,特别是屏蔽关键字。特别是现在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实现的美国50个州选择列表实例

这篇文章主要介绍了php实现的美国50个州选择列表实例,可实现让当前州为选中状态的功能,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP使用递归生成文章树

写递归函数,可考虑缓存,定义一些静态变量来存上一次运行的结果,多程序运行效率很有帮助.大概步骤如下:首先到数据库取数据,放到一个数组,然后把数据转化为一个树型状的数组,最后把这个树型状的数组转为html代码。下面我们来看个实例
收藏 0 赞 0 分享

wordpress安装过程中遇到中文乱码的处理方法

这篇文章主要介绍了wordpress安装过程中遇到中文乱码的处理方法,是个人项目中遇到的一个奇葩事件,经过一番研究,终于解决,这里记录下来分享给大家,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

php的crc32函数使用时需要注意的问题(不然就是坑)

这篇文章主要介绍了php的crc32函数使用时需要注意的问题(不然就是坑) ,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP中把对象转换为关联数组代码分享

这篇文章主要介绍了PHP中把对象转换为关联数组代码分享,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

php检测url是否存在的方法

这篇文章主要介绍了php检测url是否存在的方法,涉及php中get_headers及正则匹配的技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

php获取twitter最新消息的方法

这篇文章主要介绍了php获取twitter最新消息的方法,涉及php操作curl及正则替换的技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

php遍历CSV类实例

这篇文章主要介绍了php遍历CSV类,实例分析了php针对csv文件的打开、读取及遍历的技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP使用mysqldump命令导出数据库

最近用php写一个数据备份的功能。做法是使用php的system函数执行mysqldump命令,进行备份,这里分享给大家,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

PHP用反撇号执行外部命令

shell_exec() 命令行实际上仅是反撇号 ` 操作符的变体,如果您编写过 shell 或 Perl 脚本,您就知道可以在反撇号操作符内部捕捉其他命令的输出。
收藏 0 赞 0 分享
查看更多