0

それで、特定の単語を他の単語に置き換える方法がわかります。私が理解しようとしているのは、単語を取得してフレーズに置き換え、他のすべての入力を削除する方法です。

例えば:

悪い言葉は「犬」

ユーザー入力 -> 「あなたは犬のようなにおいがします。」

「犬」を「虹」などに置き換える代わりに、「あなたはトイレの口です」のようにエコーしたいのです。

これが私がコードのために持っているものです:

<?php

$find = array('dog', 'cat', 'bird');
$replace = 'You are a potty mouth.';

if (isset ($_POST['user_input'])&&!empty($_POST['user_input'])) {
    $user_input = $_POST['user_input']; 
    $user_input_new = str_ireplace($find, $replace, $user_input);

        echo $user_input_new;
}
?>

このコードでは、「You are like a pottymouth.」というエコーが返されます。

これは再投稿であると確信しており、お詫び申し上げます。私が見つけたものはすべて、文字列全体ではなく、文字列の一部のみを置き換える方法に関するドキュメントです。

4

4 に答える 4

2

さて、この場合、ユーザー入力文字列に「悪い単語」が含まれているかどうかを確認し、それがtrueを返した場合は、「あなたは卑猥な口です」とエコーします。

strpos()を使用することをお勧めします

例えば

if( strpos($_POST['user_input'],'dog')!==FALSE ) {
    echo('You are a potty mouth');
}

「悪い単語」の配列がある場合は、それらをループして、ユーザー入力内で発生した単語をチェックする必要があります。

于 2013-03-21T15:23:45.497 に答える
0

別の解決策として、単語を一致させ、str の * len に置き換えます。これは、単語の境界を使用するため、Scunthorpe のような単語と一致しません。また、3 番目のパラメーターを追加して、単語の最初の文字を明らかにすることもできるため、単語を見なくてもどの単語が言われたかがわかります。

<?php
$badwords = array('*c word', '*f word','badword','stackoverflow');

function swear_filter($str,$badwords,$reveal=null) {
    //Alternatively load from file
    //$words = join("|", array_filter(array_map('preg_quote',array_map('trim', file('badwords.txt')))));


    $words = join("|", array_filter(array_map('preg_quote',array_map('trim', $badwords))));
    if($reveal !=null && is_numeric($reveal)){
        return preg_replace("/\b($words)\b/uie", '"".substr("$1",0,'.$reveal.').str_repeat("*",strlen("$1")-'.$reveal.').""', $str);
    }else{
        return preg_replace("/\b($words)\b/uie", '"".str_repeat("*",strlen("$1")).""', $str);
    }

}


$str="There was a naughty Peacock from Scunthorpe and it said a badword, on stackoverflow";

//There was a naughty Peacock from Scunthorpe and it said a b******, on s************
echo swear_filter($str,$badwords,1);

//There was a naughty Peacock from Scunthorpe and it said a *******, on *************
echo swear_filter($str,$badwords);
?>
于 2013-03-21T15:55:57.830 に答える
0

私は最近同じ問題を見てきました。これは、特定の単語をフィルタリングするために取り組んでいたスクリプトです。まだ進行中の作業ですが、ユーザー メッセージまたはカスタム メッセージを出力する機能があります。それが助けになるか、正しい方向に向けられることを願っています。

define("MIN_SAFE_WORD_LIMIT", 3);
$safe = true;
$whiteList = array();
$blackList = array();

$text = 'Test words fRom a piece of text.';

$blCount = count($blackList);

for($i=0; $i<$blCount; $i++) {
    if((strlen($blackList[$i]) >= MIN_SAFE_WORD_LIMIT) && strstr(strtolower($text), strtolower($blackList[$i])) && !strstr(strtolower($text), strtolower($whiteList[$i]))) {
        $safe = false;
    }
}

if(!$safe) {
    // Unsafe, flag for action
    echo 'Unsafe';
} else {
    echo $text;
}
于 2013-03-21T15:19:30.683 に答える