我实际上正在一个网站上工作,在该网站上我需要将许多单词替换为例如:banana
by ******
。
我使用带有 php 和 mysql 的网站,但我也使用 javascript。
我的数据库中有一个表,其中包含禁用词。
我从我的数据库中以数组的形式收到这个词。我正在寻找一个能够在所有页面中替换此单词的功能。我不能使用像 ob start 这样的功能。
最好的功能是检查正文加载和替换单词。
我实际上正在一个网站上工作,在该网站上我需要将许多单词替换为例如:banana
by ******
。
我使用带有 php 和 mysql 的网站,但我也使用 javascript。
我的数据库中有一个表,其中包含禁用词。
我从我的数据库中以数组的形式收到这个词。我正在寻找一个能够在所有页面中替换此单词的功能。我不能使用像 ob start 这样的功能。
最好的功能是检查正文加载和替换单词。
这是一项相当困难的任务,因为:
我建议使用已经解决此问题的服务:
我将使用 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>