0

我实际上正在一个网站上工作,在该网站上我需要将许多单词替换为例如:bananaby ******

我使用带有 php 和 mysql 的网站,但我也使用 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

如果页面内容也来自数据库,或者正在输入到数据库中。为什么不在插入之前使用 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,'**');
于 2012-08-18T15:55:41.767 回答
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 回答
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 回答
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; 
?>

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

于 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 回答