审查禁语的系统

system for censoring banned words

本文关键字:系统 禁语 审查      更新时间:2023-09-26

我实际上正在开发一个网站,我需要用例如:banana by ****** 替换许多单词。

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

我的数据库中有一个表格,其中是禁用词。

我从我的数据库中以数组形式接收这些单词。 我正在寻找一个能够在所有页面中替换这些单词的函数。 我不能使用像OB Start这样的功能。

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

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

  1. 人们会试图通过替换某些字母来绕过这个系统,例如将"s"替换为"$","a"替换为"@",或者拼错仍然可以理解的单词
  2. 您将如何处理包含脏话的"密码"等单词?

我建议使用已经弄清楚这一点的服务:

  • http://www.webpurify.com/
  • 看看这篇SO帖子:你如何实现一个好的亵渎过滤器?

我将使用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 过滤它,或者在使用它被拉取时使用它str_replace

// 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,'**');

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

审查员.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);

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

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
});
最后,

我找到了自己的方法来使这个系统成为一种简单的方法,您无需更改所有网站的所有代码,只需更改需要审查的页面即可。

就我而言,我

使用了很多页面,但问题是我有一个包含其他页面的主页。

您所要做的就是将此代码放在页面的开头,以便在刚刚将此代码<?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; 
?>

这是一种简单的方法,但您也可以为所有审查的单词创建一个数组。

完全披露,我写了插件。

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

http://profanityfilter.chaseflorell.com/

下面是一些示例代码。

<div id="someDiv">swears are ass, but passwords are ok</div>
<script>
    $('#someDiv').profanityFilter({
        customSwears: ['ass']
    });
</script>