当前位置: 首页 > 编程笔记 >

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

米子轩
2023-03-14
本文向大家介绍PHP中使用strpos函数实现屏蔽敏感关键字功能,包括了PHP中使用strpos函数实现屏蔽敏感关键字功能的使用技巧和注意事项,需要的朋友参考一下

现在网络信息监管很严格,特别是屏蔽关键字。特别是现在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 '恭喜!通过关键字检测';

        // 往下可以进行写库操作完成发布动作。

}

 类似资料:
  • 我需要能够在事件中搜索多种模式中的任何一种,并用掩码值替换模式中的文本。这是我们应用程序中的一项功能,旨在防止敏感信息落入日志。由于信息可能来自各种来源,因此对所有输入应用过滤器是不切实际的。除了日志记录之外,toString()还有其他用途,我不希望toString()对所有调用(仅日志记录)进行统一屏蔽。 我尝试在logback中使用%替换方法。xml: 这是成功的(在用字符实体替换尖括号之后

  • 本文向大家介绍php实现屏蔽掉黑帽SEO的搜索关键字,包括了php实现屏蔽掉黑帽SEO的搜索关键字的使用技巧和注意事项,需要的朋友参考一下 相信很多站长遇到过这种情况:网站内的搜索功能被不良分子利用,通过在站内搜索框中不断搜索敏感关键词,产生一大批TITLE上带有敏感关键词的垃圾搜索结果页(如下图)。由于Baiduspider对每个站点的抓取额是有限定的,所以这些垃圾搜索结果页被百度收录,会导致其

  • 使用CXF调用SOAP Web服务后,CXF客户端记录SOAP请求消息,密码可见!我想从CXF客户端日志记录中隐藏密码等敏感数据。 以下是我在日志中得到的信息: 我只想将mypassword替换为code 我尝试了此解决方案,但它与我的CXF版本不兼容,因为它使用的是旧版本的CXF。 我真的看到了很多例子,一些扩展了LoggingOutInterceptor,其他扩展了AbstractSoapIn

  • 本文向大家介绍Lua中实现php的strpos()以及strrpos()函数,包括了Lua中实现php的strpos()以及strrpos()函数的使用技巧和注意事项,需要的朋友参考一下 在来写一个lua中实现php的strpos()函数,查找某个字符串在指定字符串首次出现的位置,其实lua中也为我们提供了这样的函数使用string.find()即可获得,下面我们还是简单写一个函数,代码如下: 测

  • 本文向大家介绍PHP屏蔽过滤指定关键字的方法,包括了PHP屏蔽过滤指定关键字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP屏蔽过滤指定关键字的方法。分享给大家供大家参考。具体分析如下: 实现思路: 一、把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少。 二、PHP读取关键字文本,存入一个数组 三、遍历关键字数组,挨个用strpos函数去看看内容有没有关键字,如

  • 本文向大家介绍PHP实现多关键字加亮功能,包括了PHP实现多关键字加亮功能的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍的是PHP实现多关键字加亮功能,可以实现在搜索的时候进行高亮提醒,具体实现代码如下: 项目结构: 搜索结果:  高亮显示 项目所需数据库结构: 实现代码: conn.php searchAndDisplayWithColor.php 说明:在这个小程序中,有一点不足之处在