ホームページ >バックエンド開発 >PHPチュートリアル >掲示板コンテンツ内の未開な言葉のフィルタリングの問題

掲示板コンテンツ内の未開な言葉のフィルタリングの問題

WBOY
WBOYオリジナル
2016-06-23 13:55:511953ブラウズ

タイトル通りです。

これで、未開の単語は配列になりました。掲示板のコンテンツを作成した後、この未開の単語の配列を使用して、掲示板のコンテンツに一致するものがあるかどうかを 1 つずつ確認する必要があります。その場合は、プロンプトを出します。野蛮な単語をフィルタリングする効果を実現する方法に苦労しています


ディスカッションへの返信 (解決策)

まず、汚い単語のパッケージ (データベース、または配列形式) が必要です。その後定期的に交換を繰り返します。

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 には、「未開、あなたの妹、死を求めている」「エコー」という 3 つの単語が含まれています。「入力した内容には、未開の単語 '$fw[$i]' が含まれています。再入力してください。」 ;" この出力行 「非文明」という言葉が常に使用されます。これをどう判断すればよいでしょうか?

12 行目の if($srs = false){
12 行目の 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次您输入的内容包含不文明用语'去你的',请重新输入//为什么不首先检测到“不文明”呢?

など、最初に見つけた後に見るのをやめた(休憩した)ことはありませんか?

最初の「uncivilized」は false に等しくない 出力: 入力した内容には、野蛮な単語「fuck you」が含まれています。再入力してください。そしてまた切断
そうあるべきではないでしょうか?なぜ切断するために 2 番目の「fuck you」にジャンプするのですか

出現順序は辞書の順序によって決まります
トライアルゴリズム (エッセンスエリアで利用可能) を使用すると、入力テキストの順序でチェックできます

よくわかりませんが、つい最近触れたばかりです

あなたのアルゴリズムは、辞書を走査し、辞書の単語がテキスト内に出現するかどうかを 1 つずつチェックすることです

つまり、どのくらいの大きさか辞書は、何回チェックする必要があるかです

そして、トライアルゴリズムは次のとおりです: テキストを単語ごとにスキャンし、回で構成される単語が辞書に含まれているかどうかを確認します
テキストを 1 回スキャンするだけで、既存の辞書の単語がすべて見つかります

こんなことを言われても、分かりません。 strstr() を変更することでこの問題を解決しました。 strstr() は全文検索にする必要があります


単一の文字列を使用してテキストを取得する場合は、strpos() の方が効率的です。


if($srs === false){ という文を取得するための配列でもあります。
echo "error". $i. "times
"

//投稿者はマニュアルを注意深く読む時間です。


if($srs === false){
echo "入力した内容には「$ fw [$ i] 」を再入力してください ";
// 家主はそうすべきです良いようです。


有一个我真的不明白,读取文件得来的 存到数组里面
运行到这步   
           (在下面这行代码之前我运行过 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 までご連絡ください。