一般信息发布网站,论坛等均具有实现非法词汇过滤功能,即当用户录入非法词汇时,进行替换,使其无法显示到页面上,针对此种功能,通常采用的时,在读取时,在读到非法词汇后,进行替换。这样做的好处是不用将非法词汇存入数据库,缺点是要在每次读取时都要进行替换。另一种解决方案是在输出时过滤掉非常词汇,优点是只要写一次就好了,可以过滤整站的非法词汇,缺点是,非法词汇仍然存入到了数据库中,呵呵,大家可以有针对性的选择,本例用的是后者,起因在于当初没有做此功能,后来需要添加,这时又不想改原来代码,所以就想了这个办法,主要是采用了HttpResponse.Filter属性来处理。具体代码如下:
首先自定义一个类,来作为非法词汇的过滤器
using System;
using System.Text;
using System.IO;
public class ResponseFilter : Stream
{
#region properties
Stream responseStream;
long position;
StringBuilder html = new StringBuilder();
#endregion
#region constructor
public ResponseFilter(Stream inputStream)
{
responseStream = inputStream;
}
#endregion
#region implemented abstract members
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override void Close()
{
responseStream.Close();
}
public override void Flush()
{
responseStream.Flush();
}
public override long Length
{
get { return 0; }
}
public override long Position
{
get { return position; }
set { position = value; }
}
public override long Seek(long offset, System.IO.SeekOrigin direction)
{
return responseStream.Seek(offset, direction);
}
public override void SetLength(long length)
{
responseStream.SetLength(length);
}
public override int Read(byte[] buffer, int offset, int count)
{
return responseStream.Read(buffer, offset, count);
}
#endregion
#region write method
public override void Write(byte[] buffer, int offset, int count)
{
string sBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
//得到非法词汇列表,这个可以在数据库或Web.Config中读取出来
string pattern = @"(非法词汇1|非法词汇2|非法词汇3)";
string[] s = pattern.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s1 in s)
{
sBuffer = sBuffer.Replace(s1, "**");
}
byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(sBuffer);
responseStream.Write(data, 0, data.Length);
}
#endregion
}
然后再Global.asax文件中,添加如下代码:
view plaincopy to clipboardprint?
<STRONG class=c>//这个适合多个页一次过处理
</STRONG><STRONG class=k>public</STRONG> <STRONG class=k>void</STRONG> Application_BeginRequest()
{
<STRONG class=k>string</STRONG> path = HttpContext.Current.Request.Path.ToLower();
<STRONG class=k>string</STRONG>[] paths = <STRONG class=k>new</STRONG> <STRONG class=k>string</STRONG>[]
{
<STRONG class=s>"/aa/"</STRONG>,<STRONG class=s>"/bb/"</STRONG>
};
<STRONG class=k>foreach</STRONG> (<STRONG class=k>string</STRONG> item <STRONG class=k>in</STRONG> paths)
{
<STRONG class=k>if</STRONG> (path.StartsWith(item))
{
Response.Filter = <STRONG class=k>new</STRONG> ResponseFilter(Response.Filter);
<STRONG class=k>break</STRONG>;
}
}
}
//这个适合多个页一次过处理
public void Application_BeginRequest()
{
string path = HttpContext.Current.Request.Path.ToLower();
string[] paths = new string[]
{
"/aa/","/bb/"
};
foreach (string item in paths)
{
if (path.StartsWith(item))
{
Response.Filter = new ResponseFilter(Response.Filter);
break;
}
}
}
或者重写某页的Render方法
view plaincopy to clipboardprint?
<STRONG class=k>protected</STRONG> <STRONG class=k>override</STRONG> <STRONG class=k>void</STRONG> Render(HtmlTextWriter writer)
{
StringWriter strWriter = <STRONG class=k>new</STRONG> StringWriter();
<STRONG class=k>base</STRONG>.Render(<STRONG class=k>new</STRONG> HtmlTextWriter(strWriter));
<STRONG class=k>string</STRONG> html = strWriter.ToString();
html = Util.ReplaceInvalidKeyword(html);
writer.Write(html);
}
分享到:
相关推荐
通过使用Response.Filter,开发者可以创建一个过滤器,该过滤器会拦截并检查响应的内容,以确保不包含任何未授权的词汇。 在本例中,通过自定义一个名为ResponseFilter的类,该类继承自Stream,并重写了相关的抽象...
以上这篇python使用response.read()接收json数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:Python简单读取json文件功能示例Python使用内置...
如果没有登录,则使用 `response.sendRedirect()` 进行重定向,并通过 `return;` 终止后续代码的执行,以确保重定向能够成功完成。 #### 四、总结 通过以上分析可知,`response.sendRedirect()` 不跳转的问题主要...
文件下载时 response.setHeader() 下载中文文件名乱码问题可以通过使用 email 附件名编码方法对文件名进行编码来解决。同时,需要正确设置 Content-Type 和 Content-Disposition 头字段来确保文件下载正确。
### JSP中利用`response.sendRedirect`与...总之,在JSP开发中,熟练掌握`response.sendRedirect`和Cookie的使用,能够帮助开发者更灵活地控制页面流程,有效管理用户数据,从而构建更加健壮和高效的Web应用程序。
服务器端的处理逻辑接收到AJAX请求后,会执行相关业务操作,然后使用`response.getWriter().write()`将结果编码为字符串并发送回客户端。 例如,在给定的`ChatController.java`中,可能包含一个处理聊天消息的AJAX...
例如,使用 response.setHeader("Cache-Control", "no-cache") 可以禁用浏览器的缓存。 三、Pragma 报头 Pragma 报头是 HTTP 1.0 中用于指定缓存指令的报头域,用于替代 Cache-Control 报头。Pragma 报头可以设置...
### Response.AppendHeader 使用大全 #### 一、概述 在 Web 开发中,`Response.AppendHeader` 方法被广泛用于向 HTTP 响应头添加自定义头部信息。这些头部信息可以用来控制浏览器的行为,如缓存策略、文件下载方式...
本文将深入探讨如何在自定义中间件中读取`Request.Body`和`Response.Body`的内容。 首先,`Request.Body`代表HTTP请求的主体部分,通常用于发送POST数据或文件上传。它是`Stream`类型的,可以读取请求的数据。在ASP...
4. **结束响应**:`Response.End`方法可以立即结束当前页面的处理,阻止任何进一步的代码执行。这在某些情况下,如处理完特定任务后,防止额外代码运行是有用的: ```vbscript Response.Write "操作成功" ...
在某些情况下,可能需要立即终止当前的响应流程,这时可以使用`Response.End`方法。一旦调用此方法,后续的任何输出都将被忽略。 ```vbnet Response.Write("Processing complete.") Response.End ``` ##### 3.3 URL...
在ASP.NET开发中,页面跳转是常见的操作,主要涉及两种方法:Response.Redirect和Server.Transfer。它们虽然都能实现页面间的导航,但在工作原理、数据处理和用户体验上存在显著差异。 **Response.Redirect** ...
使用`response.js`插件的步骤大致如下: 1. 首先,你需要在HTML文档中引入jQuery、Ender或Zepto,以及response.js库。 2. 然后,定义你的断点,这通常是在CSS中完成,或者通过JavaScript设置。 3. 在需要响应式行为...
( response.setHeader()下载中文文件名乱码问题
Response.Write 后连接Response.Redirect ,则Response.Write无法显示,直接跳转入Response.Redirect 的页面。 解决方式: Response.Write([removed]alert('成功修改'); [removed].href='index.aspx'...
jsp response.sendRedirect()用法详解 jsp response.sendRedirect()函数是JSP中一种常用的重定向方法,它可以将用户重定向到指定的页面。下面我们将详细介绍jsp response.sendRedirect()函数的用法和实现原理。 ...
在ASP.NET开发中,我们经常会遇到“正在中止线程”(ThreadAbortException)的异常,这通常是由于在页面处理过程中使用了`Response.Redirect`或`Response.End`等方法所导致的。这些方法会中断当前线程的执行,引发异常...
使用response.getWriter().write() 乱码问题 解决方式: response.setContentType(text/html;charset=UTF-8); response.getWriter().write(在此处传递要显示的内容!); 您可能感兴趣的文章:对python中的iter()函数...