审查禁语的系统
system for censoring banned words
我实际上正在开发一个网站,我需要用例如:banana
by ******
替换许多单词。
我使用带有php和mysql的网站,但我也使用javascript。
我的数据库中有一个表格,其中是禁用词。
我从我的数据库中以数组形式接收这些单词。 我正在寻找一个能够在所有页面中替换这些单词的函数。 我不能使用像OB Start这样的功能。
最好的功能是检查正文加载和替换单词的功能。
这是一项相当困难的任务,因为:
- 人们会试图通过替换某些字母来绕过这个系统,例如将"s"替换为"$","a"替换为"@",或者拼错仍然可以理解的单词 。
- 您将如何处理包含脏话的"密码"等单词?
我建议使用已经弄清楚这一点的服务:
- 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>
- 数据绑定:'系统Char'不包含名为'xxxxx'
- Javascript模块系统I'I’我正在努力,但搞不明白
- 是否可以在系统/电脑浏览器中访问手机摄像头
- Node JS中的排名系统算法
- 任何将(SSH)终端嵌入到一些HTML5表示系统中的想法(例如,show.js)
- 如何在foreach循环中对每个产品单独应用评级系统
- Javascript-修复搜索系统
- 是否有任何设置阻止JavaScript在系统上工作
- 如何组织用户系统的Mongo集合
- 数字文件命名系统
- 如何对单个页面进行密码保护(这不是身份验证系统的一部分)
- 动态代码中存在系统应用程序地址错误
- 从自己的安全系统中重新找回自己
- 难以置信的简单密码系统不工作
- 在csv文件名中使用西班牙语字符
- 在chrome.runtime消息系统中使用promise
- 当地址栏出现时,安卓系统上的css固定页脚被隐藏
- 如何使荷兰拍卖系统的价格每秒钟都在下降
- 如何获取node.js系统CLI应用程序的位置
- 审查禁语的系统