2

HTML を含む何百万ものユーザー生成投稿を含む大規模な Web サイトを運営しています。これらの投稿の一部には、広告主が宣伝したくないデリケートな言葉が含まれています。これらの投稿を削除する代わりに、「悪い」言葉を検閲したいと思います. ユーザーが投稿をマークアップできるようにすることは、サイトの主要な機能であるため、マークアップを保持する必要もあります。

私は現在、検索と置換を使用してstr_ireplace()いますが、私たちの作成者は賢くなり、私の基本的なフィルターをすり抜けること (以下) を行っています。タグを取り除いて不適切な単語を検出することはできますが、マークアップをそのままにして単語を置き換える方法を探しています。

例:

検閲に成功しました:

input:  "<p>Mary is a bitch.</p>"
output: "<p>Mary is a *****.</p>" 

検閲に失敗しました:

input:          "<p>Mary is a <strong>b</strong>itch.</p>"
failed output:  "<p>Mary is a <strong>b</strong>itch.</p>" 
desired output: "<p>Mary is a <strong>*</strong>****.</p>"
4

4 に答える 4

2

非常に難しいため、他の方法を使用してこれを停止することをお勧めします。

ジェフ・アトウッドによるこの面白い作品から、そうしようとすることからどのような「clbuttic」問題が発生するかについて:

わいせつフィルタリングは永続的な問題であり、時代を超越した問題です。この特定の問題をコードだけで解決できるとは思えません。しかし、一部の企業や開発者は、その風車に傾倒するのをやめられないようです。つまり、スカンソープに引っ越す前によく考えてください。

于 2013-01-08T14:04:21.940 に答える
1

ここでの楽しみのために、簡単で汚い方法を示します。

$badWords = array('bitch', 'jerk');
$input = '<p>Mary is a <strong>b</strong>itch. </p>';

$arr = explode(' ', $input);

foreach($arr as $key => $word)
{
    $word = str_replace('.', '', strip_tags($word));
    if(in_array($word, $badWords))
    {
        $arr[$key] = '*****';
    }
}

$output = implode(' ', $arr);
echo $output;

出力

<p>Mary is a ***** </p>

上記はテキストを単語に分割し、strip_tags()各単語に適用されるため、コンテンツ全体には影響しません。

ただし、コメントが指摘しているように、それを回避する方法はまだたくさんあります。彼らが投げかけるすべてを処理できる完璧なソリューションを手に入れることはできません.人工知能に近いものを作成する必要があります. strip_tags()最善の実際の解決策は、投稿全体を調べて悪い言葉を検索し、見つかった場合はモデレーターの注意を引くために投稿にフラグを立てることだと思います. または、アクティブなモデレーターがいるレポート投稿システムを単に用意するだけです。

于 2013-01-08T14:12:39.610 に答える
0

「悪い言葉」リストから始めて、タグのクリーンな文字列 (つまり、「悪い言葉」に対してstrip_tags()を介してフィルター処理) をチェックすることができます。次に、一連の可能な単一文字の変更を通じて、各悪い言葉を反復できます。などS=>5, 1=>L, 0=>O

于 2013-01-08T14:06:44.917 に答える
0

あなたのやり方でこれを達成するのは非常に難しいでしょうが、私が推奨するのは、単語をアスタリスクで変更するのではなく、投稿を拒否してユーザーに理由を知らせることです. 理由は次のとおりです。

  1. 検索を簡素化します。アルゴリズムがテキスト内に何らかの形式の不適切な単語が存在するかどうかのみをチェックする必要がある場合はstrip_tags、テキストを検索して単語を検索できます。これをアスタリスクに置き換えようとするとstrip_tags、元のテキストを元の状態のままにしておく必要があるため、できません。
  2. それは人々が期待するものです。人々が予期していないのは、テキストが通知なしに変更されることです。「この投稿には不適切な単語/テキストが含まれています」というメッセージを返信したほうがよいでしょう。

ユーザーを送り返すのではなく、アスタリスクに置き換えることを強く主張する場合は、HTML タグを無視してそこから単語を構築する、基本的な文字単位のパーサーを作成する必要があります。

于 2013-01-08T14:13:03.567 に答える