0

私は実際に、多くの単語を次のようなものに置き換える必要がある Web サイトに取り組んでいます: bananaby ******.

私は、php と mysql で Web サイトを使用していますが、javascript も使用しています。

私のデータベースには、禁止された単語のテーブルがあります。

この単語をデータベースから配列で受け取ります。すべてのページでこの単語を置き換えることができる関数を探しています。ob startなどの機能が使えません。

最適なのは、本文のオンロードをチェックして単語を置き換える機能です。

4

7 に答える 7

4

これは、次の理由から取り組むのがかなり難しいタスクです。

  1. 人々は、「s」を「$」、「a」を「@」などの特定の文字に置き換えたり、まだ理解できる単語のつづりを間違えたりして、このシステムを回避しようとします。
  2. ののしり言葉を含む「パスワード」のような単語をどのように扱いますか?

これをすでに理解しているサービスを使用することをお勧めします。

于 2012-08-18T15:50:16.343 に答える
2

ここでは CoffeeScript を使用します。必要に応じて、ここでJavaScript にコンパイルするか、これを疑似コードとして使用できます。

String::replaceAll = (a, b) ->
  regExp = new RegExp(a, "ig")
  @replace regExp, b

_stars = (string) ->
  str = ""
  for i in [0..string.length]
    str = "#{str}*"

  str

bannedWords = [ "bannedword", "anotherbannedword" ]

_formSubmitHandler = (data) ->
  for bannedWord in bannedWords
    data.userInput = data.userInput.replaceAll bannedWord, _stars(data.userInput)
于 2012-08-18T16:04:09.193 に答える
1

このための非常に単純な打ち切り方法を作成しました。悪い単語の配列に入れた単語のみを追跡します。単語検閲用の高度なライブラリを使用することをお勧めします。

検閲者.js

var censor = (function() {
    function convertToAsterisk(word) {
        var asteriskSentence = '';
        for(var asterisks=0;asterisks<word.length;asterisks++) {
            asteriskSentence+='*';
        }
        return asteriskSentence;
    }

    return function(sentence, bannedWords) {
        sentence    = sentence      || undefined;
        bannedWords = bannedWords   || undefined;

        if(sentence!==undefined && bannedWords!==undefined) {
            for(var word=0;word<bannedWords.length;word++) {
                sentence = sentence.replace(bannedWords[word], convertToAsterisk(bannedWords[word]));
            }
        }

        return sentence;
    };
})();

メソッドは次のように使用できます。

var sentence = 'I like apples, grapes, and peaches. My buddy likes pears';
var bannedWords = [
    'pears',
    'peaches',
    'grapes',
    'apples'
];
sentence = censor(sentence, bannedWords);

このシステムは、単語内の不適切な単語やトリッキーなスペルミスを保護しません。基本だけ。

于 2015-07-05T21:19:44.817 に答える
1

ページのコンテンツがデータベースから取得されているか、データベースに入力されている場合。挿入する前、または使用してプルするときに、php を使用してフィルタリングしないのはなぜですかstr_replace

// PREFERRED WAY
$filteredContent = str_replace($bannedlist, "**", $content2Filter);

または、JavaScript バージョンを探している場合は、multiplestr.replaceまたは regex を使用する必要があります。何かのようなもの:

var search = "/word1|word2|word3/gi"; //This would be your array joined by a pipe delimiter
var ret=str.replace(search,'**');
于 2012-08-18T15:55:41.767 に答える
0

最後に、このシステムを簡単な方法で作成する独自の方法を見つけました。すべての Web サイトのすべてのコードを変更する必要はなく、検閲が必要なページだけです。

私に関する限り、私は何千ものページを使用していますが、他のページを含むメインページが 1 つあります。

興味がありそうな人向け。あなたがしなければならないのは、このコードをあなたのページの最初に<?php ob_start(); ?>置くことです.

      <?php   
        //We get the content of the page
        $content = ob_get_contents(); 
        // and we replace all 
        $content = str_replace('naughty', '*****', $content); 

        /// / VERY important, we must finish the page or in any case include ob_end_clean () function before echo $ content as PHP code would be displayed also
    ob_end_clean ();
echo $content; 
?>

これは簡単な方法ですが、打ち切られたすべての単語の配列を作成することもできます。

于 2012-08-21T13:51:55.640 に答える
0

完全な開示、私はプラグインを書きました。

あなたが探していることを行うjQueryプラグインを作成しました。完全に水密ではなく、JavaScript を無効にすることで簡単にプラグインを回避することができます。試してみたい方はこちらのリンクをどうぞ。

http://profanityfilter.chaseflorell.com/

そして、ここにいくつかのサンプルコードがあります。

<div id="someDiv">swears are ass, but passwords are ok</div>

<script>
    $('#someDiv').profanityFilter({
        customSwears: ['ass']
    });
</script>
于 2012-10-29T02:16:49.347 に答える
0
var str="badword";
var ret=str.replace("badword","*******");

そして、長さを自動的に検出する(関数の使用に役立ちます)

var str="badword";
var ret=str.replace("badword",function() {
    var ret = ""
    for(var loop = 0; loop < str.length; loop++) {
        var ret = ret + "*"
    }
    return ret
});
于 2012-08-18T15:50:45.890 に答える