屏蔽不良关键词

时间:2021-11-16 05:57:53
公司打算在*和大陆设立两个web服务器,数据库用发布和订阅的方式保证数据一致。

现在的问题是*言论*,大陆这边需要屏蔽一些不良的关键字,在程序不做大改动的情况下,如何能够屏蔽掉一些不良关键字?

大家有什么好的方法,谢谢!

21 个解决方案

#1


#2


可以在conn中加
for each item in request.form
stritem=lcase(server.HTMLEncode(Request.form(item)))
if instr(stritem,要屏蔽的关键字)>0 or instr(stritem,要屏蔽的关键字)>0  response.write ("对不起,请不要输入非法字符!")
         response.end
end if
next

#3


大陆的WEB服务器显示数据的时候用正则将需要屏蔽的关键字替换掉即可

#4


哈哈,我自己想到一种js方法,大家看看可行吗?

<body>
aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbcccccccccdeabde
</body>


<SCRIPT LANGUAGE="javascript">
var KeyArr=new Array(2)
KeyArr[0]=new Array(/a/g,/b/g,/c/g,/d/g);//不良关键字列表
KeyArr[1]=new Array("阿","不","才","的");//替换关键字列表
var doc_txt;
doc_txt=document.body.innerHTML;
var i=0;
for(i in KeyArr[0])
{
doc_txt=doc_txt.replace(KeyArr[0][i],KeyArr[1][i]);
}

document.body.innerHTML=doc_txt;
</Script>

#5


可以在读出来的时候用一个 replease把关键字换了。

#6


呼呼,类似俺了。把<%...%>中间的弄成一个文件包含在每一页中即可

<form action="" method="post" name="form1" id="form1">
<input name="keyword" type="text" id="keyword" value="" size="30" />
<input type="submit" name="Submit" value="查询" />
</form>

<%
Function Check_InvalidStr()
dim sql_injdata 
indata = "*|国民|csdn|其它|*" 
indatas = split(indata,"|") 

If Request.QueryString<>"" Then 
For Each str_Get In Request.QueryString 
For i=0 To Ubound(indatas) 
if instr(Request.QueryString(str_Get),indatas(i))>0 Then 
Response.Write "<Script Language=javascript>alert('系统提示!您使用了禁语!');history.back(-1)</Script>" 
Response.end 
end if 
next 
Next 
End If 

If Request.QueryString<>"" Then 
For Each str_Get In Request.form 
For i=0 To Ubound(indatas) 
if instr(Request.form(str_Get),indatas(i))>0 Then 
Response.Write "<Script Language=javascript>alert('系统提示!您使用了禁语!');history.back(-1)</Script>" 
Response.end 
end if 
next 
Next 
End If 
End Function

Check_InvalidStr
%>

#7


倒,理解错误?

#8


xhbmj(俱往矣,数风流人物还看今朝) 咱俩的思路一样哈哈~~~只是你不需要那么麻烦
function 过滤(文章形参)
参照xhbmj的function
end function
然后再显示文章的时候用<%=过滤(文章内容)%>,这不就好了,简单方便,想在哪里用就在哪里用哈哈

#9


mark

#10


因为不同的制度,不同的互联网管理条例...

设定如下思路大概更好一些.同地发的,分别正常关键词屏蔽.同上各位楼上的发言.

异地显示的...只有管理认证才能显示.

A地到B地,或B地到A地的记录--->版界检查记录是否通过归属地(管理员)认证.二次认证的,两地都显示,其中一次认证的,只在A或B显示(归属地发言通过关键词屏蔽即默认认证).

#11


该回复被版主删除

#12


用正则比较方便且简单一些
建议参考 jasonboy(骑着小猪看夕阳) 的方法

#13


我觉得还是用replace来替换,会替换回车就知道原理了

#14


也可以使用正则表达式

#15


<%
'过滤不良字符(BadWords)
Function ChkBadWords(fString)
    Dim BadWords,bwords,i
    BadWords = "非法词1|非法词2|非法词3"
    IF(Not(IsNull(BadWords) or IsNull(fString)))THEN
    bwords = Split(BadWords, "|")
    For i = 0 to UBound(bwords)
        fString = Replace(fString, bwords(i), string(Len(bwords(i)),"*"))
    Next
    ChkBadWords = fString
    END IF
End Function
%>

#16


方法大家都知道,主要是想一个最优化的方法,在有效性和运行效率方面最好的解决方案.

#17


用replace过滤掉,速度不会很慢的

#18


替换存在一定的问题
用提示信息

#19


replace

#20


帮顶

#21


方法大家都知道,主要是想一个最优化的方法,在有效性和运行效率方面最好的解决方案.
同意hurrayboy() 的

#22


我也赞同读取后替换再输出。

#1


#2


可以在conn中加
for each item in request.form
stritem=lcase(server.HTMLEncode(Request.form(item)))
if instr(stritem,要屏蔽的关键字)>0 or instr(stritem,要屏蔽的关键字)>0  response.write ("对不起,请不要输入非法字符!")
         response.end
end if
next

#3


大陆的WEB服务器显示数据的时候用正则将需要屏蔽的关键字替换掉即可

#4


哈哈,我自己想到一种js方法,大家看看可行吗?

<body>
aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbcccccccccdeabde
</body>


<SCRIPT LANGUAGE="javascript">
var KeyArr=new Array(2)
KeyArr[0]=new Array(/a/g,/b/g,/c/g,/d/g);//不良关键字列表
KeyArr[1]=new Array("阿","不","才","的");//替换关键字列表
var doc_txt;
doc_txt=document.body.innerHTML;
var i=0;
for(i in KeyArr[0])
{
doc_txt=doc_txt.replace(KeyArr[0][i],KeyArr[1][i]);
}

document.body.innerHTML=doc_txt;
</Script>

#5


可以在读出来的时候用一个 replease把关键字换了。

#6


呼呼,类似俺了。把<%...%>中间的弄成一个文件包含在每一页中即可

<form action="" method="post" name="form1" id="form1">
<input name="keyword" type="text" id="keyword" value="" size="30" />
<input type="submit" name="Submit" value="查询" />
</form>

<%
Function Check_InvalidStr()
dim sql_injdata 
indata = "*|国民|csdn|其它|*" 
indatas = split(indata,"|") 

If Request.QueryString<>"" Then 
For Each str_Get In Request.QueryString 
For i=0 To Ubound(indatas) 
if instr(Request.QueryString(str_Get),indatas(i))>0 Then 
Response.Write "<Script Language=javascript>alert('系统提示!您使用了禁语!');history.back(-1)</Script>" 
Response.end 
end if 
next 
Next 
End If 

If Request.QueryString<>"" Then 
For Each str_Get In Request.form 
For i=0 To Ubound(indatas) 
if instr(Request.form(str_Get),indatas(i))>0 Then 
Response.Write "<Script Language=javascript>alert('系统提示!您使用了禁语!');history.back(-1)</Script>" 
Response.end 
end if 
next 
Next 
End If 
End Function

Check_InvalidStr
%>

#7


倒,理解错误?

#8


xhbmj(俱往矣,数风流人物还看今朝) 咱俩的思路一样哈哈~~~只是你不需要那么麻烦
function 过滤(文章形参)
参照xhbmj的function
end function
然后再显示文章的时候用<%=过滤(文章内容)%>,这不就好了,简单方便,想在哪里用就在哪里用哈哈

#9


mark

#10


因为不同的制度,不同的互联网管理条例...

设定如下思路大概更好一些.同地发的,分别正常关键词屏蔽.同上各位楼上的发言.

异地显示的...只有管理认证才能显示.

A地到B地,或B地到A地的记录--->版界检查记录是否通过归属地(管理员)认证.二次认证的,两地都显示,其中一次认证的,只在A或B显示(归属地发言通过关键词屏蔽即默认认证).

#11


该回复被版主删除

#12


用正则比较方便且简单一些
建议参考 jasonboy(骑着小猪看夕阳) 的方法

#13


我觉得还是用replace来替换,会替换回车就知道原理了

#14


也可以使用正则表达式

#15


<%
'过滤不良字符(BadWords)
Function ChkBadWords(fString)
    Dim BadWords,bwords,i
    BadWords = "非法词1|非法词2|非法词3"
    IF(Not(IsNull(BadWords) or IsNull(fString)))THEN
    bwords = Split(BadWords, "|")
    For i = 0 to UBound(bwords)
        fString = Replace(fString, bwords(i), string(Len(bwords(i)),"*"))
    Next
    ChkBadWords = fString
    END IF
End Function
%>

#16


方法大家都知道,主要是想一个最优化的方法,在有效性和运行效率方面最好的解决方案.

#17


用replace过滤掉,速度不会很慢的

#18


替换存在一定的问题
用提示信息

#19


replace

#20


帮顶

#21


方法大家都知道,主要是想一个最优化的方法,在有效性和运行效率方面最好的解决方案.
同意hurrayboy() 的

#22


我也赞同读取后替换再输出。