<>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Server对象_server : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Server对象是 context的一个属性,是 HttpServerUtility类的一个对象
Server.ScriptTimeout = 90; //ScriptTimeout属性用于设置脚本程序执行的时间,这里将脚本程序执行时间设为90秒。适当地设置脚本程序的ScriptTimeout可以提高整个Web应用程序的效率。语法如下:Server.ScriptTimeout=time;(以s(秒)为单位)。在调试模式下(也就是说,如果在web.config中将debug属性设置为'true'),server.scripttimeout的默认取值为30000000秒,大约是一年的时间,如果不是在调试模式下,server.scripttimeout的取值为90秒
Response.Write(Server.MachineName + "</br>"); //输出服务器机器名。
Response.Write(Server.ScriptTimeout);
Response.Write("<P>这是Execute执行之前</p>");
Server.Execute("~/Request对象/Request对象.aspx");//将“Request对象.aspx”页面输出的内容添加到当前页面之中
Response.Write("<P>这是Execute执行之后");
//Server.Transfer("~/Request对象/Request对象.aspx");//内部重定向请求。context.Server.Transfer("~/About.aspx")将用户请求重定向给~/About.aspx处理,是服务器内部的接管,浏览器是意识不到这个接管的(所以HTTP响应报文状态码是200 OK 而不是302 重定向),因此浏览器地址栏不会像Response.Redirect("~/About.aspx")那样经过两次响应,它一次响应就够了(是一次HTTP请求)。所以浏览器地址栏并不会发生变化(注意Server.Transfer()是服务器内部接管,因此它不能像Response.Redirect()那样定义到外部网站)
//Response.Redirect("~/About.aspx");
Response.Write(HttpUtility.HtmlEncode("<P>你好中国</p>")); //或者写成Response.Write(Server.HtmlEncode("<P>你好中国</p>"))都可以。其中作用主要是将<转换为< , 将>转换为> 以达到可以在网页里输出<>的目的,而不是当成一个HTML标记。 主要是防止跨站脚本漏洞,比如XSS漏洞攻击。
/*
HtmlEncode是编辑HTML代码的。而UrlEncode是编辑超链接的,注意不要搞混了。
//字符串的编码与解码
//UrlDecode主要是解码中文字符的。比如你输入“%e4%b8%ad%e6%96%87”用UrlDecode来解码就会得到“中文”两个字。而Url主要是编码中文字符的,比如你输入“中文”通过UrlEncode进行编码就会输出“%e4%b8%ad%e6%96%87”
Response.Write(Server.UrlDecode("中文"));//输出:中文
Response.Write(Server.UrlEncode("中文"));//输出:%e4%b8%ad%e6%96%87
Response.Write(Server.UrlEncode("english"));//输出:english
Response.Write(Server.UrlDecode("english"));//输出:english
*/
Response.Write(HttpUtility.UrlDecode("%e4%b8%ad%e6%96%87"));//输出结果为“中文”
}
}
有的时候从一个文件中读取数据的时候,可能存在中午乱码的问题,这时候就需进行编码处理:
string msg = System.IO.File.ReadAllText(filePath, System.Text.Encoding.Default);
假如说,我现在要指定一个gb2312的编码,Encoding. 又点不出来,怎么办?
可以用这种方式来指定: Encoding.GetEncoding("gb2312");
UrlEncoden是将一些HTTP协议无法直接识别的汉字进行编码,这样HTTP协议就能识别了。
UrlEncoden是怎么编码的呢?首先找到需要编码的字符的ASCII码,比如‘/’的ASCII码是的十进制数值是47然后转换成16进制就是2f 然后再2f前面加一个%就可以了
所以,一个'/'经过UrlEncoden编码后,就是%2f 而汉字不同的码表下表现形式不一样,所以就不做举列了。
而HttpEncoden则是对写一些javascript字符串进行编码,将<> 转换成<,> 这是他们的区别。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApp
{
public partial class WebForm1 : System.Web.UI.Page
{
//其实this.Server.UrlEncoden 是对HttpUtility.UrlEncoden的封装,他里面调用的其实就是 HttpUtility.UrlEncode
//所以Server.UrlEncoden与HttpUtility.UrlEncoden是一样的。
protected void Page_Load(object sender, EventArgs e)
{
string ss = "https://www.baidu.com/?userNmae=张三";
this.Response.Write(ss);
this.Response.Write("<br/>");
//一般我们不会对整个Url都进行UrlEncode编码
//this.Response.Write(HttpUtility.UrlEncode(ss));// this.Response.Write(this.Server.UrlEncode(ss));
//我们仅仅是对一些中文,或者url中的一些需要进行实际输出时“转义符”
this.Response.Write("https://www.baidu.com/?userNmae=" + this.Server.UrlEncode("张三"));
}
}
}
HttpEncoden
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApp
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string s = "<script>alert('中毒了');window.location='http://www.baidu.com';</script>";
//this.Response.Write(s); //这里直接弹出一个对话框“中毒了”然后跳转到百度页面了。即执行了这段js代码
string ss = this.Server.HtmlEncode(s);
this.Response.Write(ss);//而这里是输出<script>alert('中毒了');window.location='http://www.baidu.com';</script> 这段字符串
}
}
}