目录
回复讨论(解决方案)
首页 后端开发 php教程 留言板内容不文明词语过滤的问题

留言板内容不文明词语过滤的问题

Jun 23, 2016 pm 01:55 PM
内容 留言板 过滤

如题。

现在不文明词语是个数组,在留言板内容后,我需要用这个不文明词语数组里面逐个查找留言板内容中是否有匹配的。如果有则提示。在纠结着怎么样才能实现这个不文明词语过滤的效果


回复讨论(解决方案)

首先得有一个脏词包(数据库,或者数组形式)。然后循环正则替换。

function filterWd($content){    $fn = "common/filterword.txt";    $fd = fopen($fn, "rb");    if(file_exists($fn)){        $fw = array();        while(!feof($fd)){            $fw[] = fgets($fd);        }        for($i = 0; $i < count($fw); $i++){            $srs = stripos($content, $fw[$i]);            if($srs = false){                echo "error";            }else{                echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";                break;            }        }    }else{        echo null;    }}filterWd("你妹的找死啊");
登录后复制


比如 filterword.txt 里面有 不文明、你妹、找死 三个词语 “echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";” 这行输出的永远是 不文明 这个单词啊,这个怎么判断?

12行的 if($srs = false){
改为 if($srs == false){

12行的 if($srs = false){
改为 if($srs == false){



嗯,我改过来了还是觉得不行。但是我后面改了一下要过滤的词语后就能找出来了,现在问题又来了,为什么有些词语明明是有的就是没检测出来。如

function filterWd($content){		$fw = array("不文明", "去你的");		for($i = 0; $i < count($fw); $i++){			$srs = stripos($content, $fw[$i]);			if($srs == false){				echo "error 第" . $i . "次<br />";			}else{				echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";				break;			}		}	}filterWd("不文明啊去你的");输出:error 第0次您输入的内容包含不文明用语'去你的',请重新输入//为什么不首先检测到“不文明”呢?
登录后复制

你不是在找到第一个就不再找(break)了吗?

第一个 “不文明” 不等于 false 输出:您输入的内容包含不文明用语'去你的',请重新输入。然后再断开
不应该是这样的吗?怎么会跳到第二个“去你的”去断开

出现的次序是由你的字典顺序决定的
如果你用 trie 算法(精华区有)的话,才能按输入文字的次序检查

不是很理解 , 刚接触不久

你的算法是遍历字典,逐个查看字典字是否出现在正文中
也就是字典有多大,就要检查多少遍

而 trie 算法是:逐字扫描正文,检查由字组成的次是否出现在字典中
只需扫描一遍正文,就可找到所有存在的字典字

经你这么,有点似懂非懂。我换了个 strstr() 就解决了这个问题, strstr() 应该就是全文检索

unction filterWd($content){		$fw = array("天堂", "地狱", "找死", "你妹的", "不文明");		for($i = 0; $i < count($fw); $i++){			$srs = stristr($content, $fw[$i]);			if($srs == false){				echo "error";			}else{				echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";				break;			}		}	}filterWd("不文明啊去你的天堂找死");输出:您输入的内容包含不文明用语'天堂',请重新输入//不管我数组里面怎么打乱次序,数组中第一个 “天堂” 首先在正文中被检索到
登录后复制

如果只是用单个字符串去检索正文用 strpos() 效率应该会更快些

关键是我现在是数组去检索正文 还得判断从数组中取出的是不是匹配 这个有点难理解

if($srs === false){
echo "error 第" . $i . "次
";
}else{
echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";
break;
}

//楼主该好好看手册了。

if($srs === false){
echo "error 第" . $i . "次
";
}else{
echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";
break;
}

//楼主该好好看手册了。



有一个我真的不明白,读取文件得来的 存到数组里面
运行到这步
(在下面这行代码之前我运行过 echo $fw[0....9])都是有结果的)
$srs = stristr($content, $fw[$i]); //到这行就是 false 了

返回值永为 false ;

实在让人费解

用var_dump();分别输出一下两个值看看。

var_dump() 也度过了, 只要是过了 $srs = stristr($content, $fw[$i]); 输出的全都是 false

function filterWd($content){        $fw = array("天堂", "地狱", "找死", "你妹的", "不文明");        for($i = 0; $i < count($fw); $i++){            $srs = stristr($content, $fw[$i]);            if($srs !== false){                echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入<br>";                //break;            }        }    }filterWd("不文明啊去你的天堂找死");
登录后复制
登录后复制
您输入的内容包含不文明用语'天堂',请重新输入
您输入的内容包含不文明用语'找死',请重新输入
您输入的内容包含不文明用语'不文明',请重新输入

之前写了个php替换敏感字符的类,有白名单和黑名单。
黑名单的会替换为*。

可以参考一下: http://blog.csdn.net/fdipzone/article/details/8486985

function filterWd($content){        $fw = array("天堂", "地狱", "找死", "你妹的", "不文明");        for($i = 0; $i < count($fw); $i++){            $srs = stristr($content, $fw[$i]);            if($srs !== false){                echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入<br>";                //break;            }        }    }filterWd("不文明啊去你的天堂找死");
登录后复制
登录后复制
您输入的内容包含不文明用语'天堂',请重新输入
您输入的内容包含不文明用语'找死',请重新输入
您输入的内容包含不文明用语'不文明',请重新输入


我知道这样是可以。如果数组是读取文件得来的就不行

你读文件时没有去掉换行符

$fn = "common/filterword.txt";$fd = fopen($fn, "rb");if(file_exists($fn)){   $fw = array();   while(!feof($fd)){     $fw[] = trim(fgets($fd));   }}print_r($fw);
登录后复制

干脆这样
$fn = "common/filterword.txt";$fw = file($fn, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);print_r($fw);
登录后复制

过滤的话...可不可以不提示直接和谐后发布?

echo str_replace($脏话数组, , $content);


还真的是这样,去掉  空格  换行符   就可以了 

$fw[] = trim(fgets($fn));  

然后再检索   strstr($content,$fw[$i]);   

这样就可以了

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在iPhone上启用'敏感内容警告”并了解其功能 如何在iPhone上启用'敏感内容警告”并了解其功能 Sep 22, 2023 pm 12:41 PM

特别是在过去十年中,移动设备已成为与朋友和家人分享内容的主要方式。易于访问、易于使用的界面以及实时捕获图像和视频的能力使其成为制作和共享内容的绝佳选择。但是,恶意用户很容易滥用这些工具来转发不需要的敏感内容,这些内容可能不适合查看并未经您的同意。为了防止此类情况发生,iOS17中引入了带有“敏感内容警告”的新功能。让我们来看看它以及如何在iPhone上使用它。新的“敏感内容警告”是什么,它是如何工作的?如上所述,敏感内容警告是一项新的隐私和安全功能,旨在帮助防止用户查看敏感内容,包括iPhone

Microsoft Edge浏览器打开是360导航怎么改-更改打开是360导航的方法 Microsoft Edge浏览器打开是360导航怎么改-更改打开是360导航的方法 Mar 04, 2024 pm 01:50 PM

怎么更改MicrosoftEdge浏览器打开是360导航的页面呢?其实很简单,那么现在小编就和大家一起分享关于更改MicrosoftEdge浏览器打开是360导航页面的方法,有需要的朋友可以来看看哦,希望可以帮助到大家。打开MicrosoftEdge浏览器。我们看到是下图这种页面。点击右上角的三点图标。点击“设置”。在设置页面的左侧栏里点击“启动时”。点击右侧栏里的图中示意的三点(不要能点击“打开新标签页”),然后点击编辑,将网址改成“0”(或其他无意义的数字)。然后点击“保存”。接下来,选择“

如何利用PHP函数进行搜索和过滤数据? 如何利用PHP函数进行搜索和过滤数据? Jul 24, 2023 am 08:01 AM

如何利用PHP函数进行搜索和过滤数据?在使用PHP进行开发的过程中,经常需要对数据进行搜索和过滤。PHP提供了丰富的函数和方法来帮助我们实现这些操作。本文将介绍一些常用的PHP函数和技巧,帮助你高效地进行数据的搜索和过滤。字符串搜索PHP中常用的字符串搜索函数是strpos()和strstr()。strpos()用于查找字符串中某个子串的位置,如果存在,则返

夸克如何打开过滤重复文件 夸克如何打开过滤重复文件 Mar 01, 2024 am 11:25 AM

使用夸克浏览器时,其中有一个过滤重复文件的功能,有些朋友对此还不是很了解,下面为大家介绍一下打开这个功能的操作方法,感兴趣的朋友和我一起来看看吧。1.首先在手机中点击“夸克浏览器”进入界面后,在页面中间的选项里点击选择“夸克网盘”打开进入。2.在夸克网盘界面里下方部分找到“备份设置”,并在上面点击打开,如下图所示位置:3.接下来在进入的页面里有一个“过滤重复文件”,在它的后面显示有一个开关按钮,在上面点击圆形的滑块把它设置为彩色即为开启该功能,继续备份文件时将会跳过重复的文件来节省网盘容量。

Python实现XML数据的过滤和筛选 Python实现XML数据的过滤和筛选 Aug 09, 2023 am 10:13 AM

Python实现XML数据的过滤和筛选XML(eXtensibleMarkupLanguage)是一种用于存储和传输数据的标记语言,它具有灵活性和可扩展性,常被用于在不同系统之间进行数据交换。在处理XML数据时,我们经常需要对其进行过滤和筛选,以提取出我们所需的信息。本文将介绍如何使用Python来实现XML数据的过滤和筛选。导入所需模块在开始之前,我们

PHP和PHPMAILER:如何实现邮件发送的自动过滤功能? PHP和PHPMAILER:如何实现邮件发送的自动过滤功能? Jul 21, 2023 am 09:25 AM

PHP和PHPMAILER:如何实现邮件发送的自动过滤功能?在现代社会中,电子邮件已成为人们交流的重要方式之一。然而,随着电子邮件的流行和广泛使用,垃圾邮件的数量也呈现出爆炸式增长的趋势。垃圾邮件不仅会浪费用户的时间和网络资源,还可能带来病毒和钓鱼行为。因此,在开发邮件发送功能时,加入自动过滤垃圾邮件的功能变得至关重要。本文将介绍如何使用PHP和PHPMai

PHP数据过滤:如何防止文件上传漏洞 PHP数据过滤:如何防止文件上传漏洞 Jul 30, 2023 pm 09:51 PM

PHP数据过滤:如何防止文件上传漏洞文件上传功能在Web应用程序中非常常见,但同时也是最容易遭受攻击的功能之一。攻击者可能会利用文件上传漏洞来上传恶意文件,从而导致服务器系统被入侵,用户数据遭到泄露或者恶意软件传播等安全问题。为了防止这些潜在的威胁,我们应该对用户上传的文件进行严格的过滤和检查。验证文件类型攻击者可能会将.txt文件重命名为.php文件,并上

Microsoft Edge在哪设置显示下载按钮-Microsoft Edge设置显示下载按钮的方法 Microsoft Edge在哪设置显示下载按钮-Microsoft Edge设置显示下载按钮的方法 Mar 06, 2024 am 11:49 AM

大家知道MicrosoftEdge在哪设置显示下载按钮吗?下文小编就带来了MicrosoftEdge设置显示下载按钮的方法,希望对大家能够有所帮助,一起跟着小编来学习一下吧!第一步:首先打开MicrosoftEdge浏览器,单击右上角【...】标识,如下图所示。第二步:然后在弹出菜单中,单击【设置】,如下图所示。第三步:接着单击界面左侧【外观】,如下图所示。第四步:最后单击【显示下载按钮】右侧按钮,由灰变蓝即可,如下图所示。上面就是小编为大家带来的MicrosoftEdge在哪设置显示下载按钮的

See all articles