Javascript 禁词审查制度

Javascript 禁词审查制度,javascript,words,Javascript,Words,事实上,我正在开发一个网站,在这个网站上,我需要用一些词来代替很多词,比如:香蕉被****** 我使用带有php和mysql的网站,但我也使用javascript 我的数据库中有一个表,其中有禁止使用的单词 我正在从数据库接收数组中的这些单词。我正在寻找一个功能,将能够取代这个词在所有tha页。我不能使用像ob start这样的功能 最好的功能是检查body onload并替换单词。这是一项相当困难的任务,因为: 人们会试图通过将某些字母(如s)替换为$,将a替换为@或拼错仍然可以理解的单词来绕

事实上,我正在开发一个网站,在这个网站上,我需要用一些词来代替很多词,比如:香蕉被******

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

我的数据库中有一个表,其中有禁止使用的单词

我正在从数据库接收数组中的这些单词。我正在寻找一个功能,将能够取代这个词在所有tha页。我不能使用像ob start这样的功能


最好的功能是检查body onload并替换单词。

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

人们会试图通过将某些字母(如s)替换为$,将a替换为@或拼错仍然可以理解的单词来绕过这个系统 您将如何处理像密码这样包含脏话的单词? 我建议使用已经解决了这一问题的服务:

看看这篇文章: 并自动检测长度,这对函数使用非常有用

var str="badword";
var ret=str.replace("badword",function() {
    var ret = ""
    for(var loop = 0; loop < str.length; loop++) {
        var ret = ret + "*"
    }
    return ret
});

如果页面内容同样来自数据库,或者正在输入数据库。为什么不在插入它之前或者在使用str_replace拉取它时使用php进行过滤呢

或者,如果您正在寻找javascript版本,则需要使用multiple str.replace或regex。比如:

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

我将使用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)

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

就我而言,我使用了许多页面,但问题是我有一个包含其他页面的主页

对于可能感兴趣的人。你所要做的就是把这个代码放在你的页面的开头,所以在你的页面结束后,把这个代码放在正文的末尾,然后再把这个代码放进去

      <?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; 
?>

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

完全公开,我写了这个插件

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

下面是一些示例代码

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

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

我为此做了一个非常简单的审查方法。它将只跟踪你放入坏单词数组中的单词。我建议你使用一个高级的文字审查库

审查员

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;
    };
})();

该系统不保护其他单词中的坏单词,也不保护复杂的拼写错误。只提供基本功能。

欢迎使用Stack Overflow Stanislas!您是否有代码将禁止的单词添加到Javascript中?如果没有,那么你需要考虑如何工作。是不是每个用户都必须在每次加载页面时下载每个脏话?这里更喜欢服务器端解决方案。真的想在客户端的js中这样做。这意味着禁用它的人将看到所有原始值?为什么要在页面中这样做,而不是在服务器端或将其添加到数据库中?事实上,这是为我工作的公司准备的。他们要求我这样做,因为我们可能有来自CNIL的控制权,用英语说,是委员会执行数据保护法。我只需要在内联网中禁用它,而不是在员工使用活动javascript时禁用它。使用它,我将无法更改所有页面中的所有功能?事实上,这是为我工作的公司禁用的。他们要求我这样做,因为我们可能有来自CNIL的控制权,用英语说,是委员会执行数据保护法。我只需要在内联网中禁用它,而不是员工使用的动态javascript。没有一个系统是完美的。我试过webpurify,它说没有亵渎,当我写《霍克,你是人类》的时候,如果不是正则表达式,它不会只出现第一次吗?但我可能错了。是的,我只是给出了一个如何使用String.replace方法的示例。您应该在提交包含用户数据的表单时使用它。我理解,但这通常是不可能的,因为我在intranet服务中有12000多个表单。因此,这意味着我将不得不全部改变它们。我需要找到另一个问题。但是谢谢你的帮助。我明白了,所有这些表格都有不同的要求吗?没有办法集中过滤数据?是的,因为这是为了一个内阁来进行债务回收。因此,他们有许多不同的行为形式,如添加付款、编辑付款、添加客户、编辑客户、添加债务人、编辑债务人,以及与他们的职业相关的所有行为。
<div id="someDiv">swears are ass, but passwords are ok</div>

<script>
    $('#someDiv').profanityFilter({
        customSwears: ['ass']
    });
</script>
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);