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