タイトル通りです。
これで、未開の単語は配列になりました。掲示板のコンテンツを作成した後、この未開の単語の配列を使用して、掲示板のコンテンツに一致するものがあるかどうかを 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("你妹的找死啊");
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 回スキャンするだけで、既存の辞書の単語がすべて見つかります
単一の文字列を使用してテキストを取得する場合は、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]);
这样就可以了