审查被禁词的制度

时间:2012-08-18 15:45:25

标签: javascript words

我实际上在一个网站上工作,我需要用例如banana ******替换许多单词。

我使用的是带有php和mysql的网站,但我也使用了javascript。

我的数据库中有一张表是禁止的单词。

我在数据库中的数组中收到这些单词。我正在寻找能够在所有页面中替换这些单词的功能。我不能使用像ob start这样的功能。

最好的功能是检查正文加载并替换单词。

7 个答案:

答案 0 :(得分:4)

这是一项相当困难的任务,因为:

  1. 人们会试图通过替换某些字母来避开这个系统,例如将“s”替换为“$”,将“a”替换为“@”,或者拼错仍然可以理解的字词
  2. 你如何处理包含咒骂词的“密码”这样的词?
  3. 我建议使用已经解决过的服务:

答案 1 :(得分:2)

我将使用CoffeeScript,如果您愿意,可以编译为JavaScript here,或者只将其用作伪代码。

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)

答案 2 :(得分:1)

如果页面内容同样来自数据库,或者正在输入数据库。为什么不在插入之前或使用str_replace

拉动它时使用php过滤它
// PREFERRED WAY
$filteredContent = str_replace($bannedlist, "**", $content2Filter);

或者,如果您正在寻找一个javascript版本,那么您需要使用多个str.replace或正则表达式。类似的东西:

var search = "/word1|word2|word3/gi"; //This would be your array joined by a pipe delimiter
var ret=str.replace(search,'**');

答案 3 :(得分:1)

我为此做了一个非常简单的审查方法。它只会跟踪你输入坏词数组的单词。我建议您使用高级库进行单词检查。

censor.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);

该系统不保护其他词语中的坏词或棘手的错误拼写。只有基础。

答案 4 :(得分: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
});

答案 5 :(得分:0)

最后,我找到了自己的方法来制作这个系统,这是一种简单的方法,您不需要为所有网站更改所有需要审查的页面的代码。

就我而言,我使用的是页面,但事实是我有一个包含其他页面的主页面。

对于可能感兴趣的人。你所要做的就是把这段代码放在页面的开头,这样只需把这段代码<?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; 
?>

这是一种简单的方法,但你也可以为所有被删除的单词做一个数组。

答案 6 :(得分:0)

完全披露,我写了插件。

我写了一个jQuery插件,可以满足您的需求。它不是完全防水的,其他人可以通过禁用javascript轻松绕过插件。如果你想尝试一下,这里有一个链接。

http://profanityfilter.chaseflorell.com/

这是一些示例代码。

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

<script>
    $('#someDiv').profanityFilter({
        customSwears: ['ass']
    });
</script>