留言板内容不文明词语过滤的问题
如题。
现在不文明词语是个数组,在留言板内容后,我需要用这个不文明词语数组里面逐个查找留言板内容中是否有匹配的。如果有则提示。在纠结着怎么样才能实现这个不文明词语过滤的效果
回复讨论(解决方案)
首先得有一个脏词包(数据库,或者数组形式)。然后循环正则替换。
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]);
这样就可以了

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

CheatEngine是一款游戏编辑器,能够对游戏的内存进行编辑修改。但是它的默认语言是非中文的,对于很多小伙伴来说比较不方便,那么CheatEngine怎么设置中文呢?今天小编就给大家详细介绍一下CheatEngine设置中文的方法,希望可以帮助到你。 设置方法一 1、双击打开软件,点击左上角的“edit”。 2、接着点击下方选项列表中的“settings”。 3、在打开的窗口界面中,点击左侧栏中的“languages”

PHP作为一种广泛应用于Web开发的脚本语言,其表单验证和过滤是非常重要的一部分。在用户提交表单的过程中,需要对用户输入的数据进行验证和过滤,以确保数据的安全性和有效性。本文将介绍PHP中如何进行表单验证和过滤的方法和技巧。一、表单验证表单验证是指对用户输入的数据进行检查,以确保数据符合特定的规则和要求。常见的表单验证包括对必填项的验证、邮箱格式、手机号码格

PHP数据过滤:处理日期和时间输入概述:在开发网页应用程序时,经常需要处理用户输入的日期和时间数据。由于用户的输入可能存在各种格式和错误,因此必须进行有效的数据过滤和验证,以确保数据的准确性和安全性。本文将介绍如何使用PHP来处理日期和时间输入,并提供相应的代码示例。过滤和验证原则:在处理日期和时间输入之前,首先需要确定相应的过滤和验证原则。以下是一些常见的
