留言板内容不文明词语过滤的问题
如题。
现在不文明词语是个数组,在留言板内容后,我需要用这个不文明词语数组里面逐个查找留言板内容中是否有匹配的。如果有则提示。在纠结着怎么样才能实现这个不文明词语过滤的效果
回复讨论(解决方案)
首先得有一个脏词包(数据库,或者数组形式)。然后循环正则替换。
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來處理日期和時間輸入,並提供對應的程式碼範例。過濾和驗證原則:在處理日期和時間輸入之前,首先需要確定相應的過濾和驗證原則。以下是一些常見的
