您的位置:首页 > 理论基础 > 计算机网络

Server对象 HttpUtility.UrlDecode |UrlEncode |HtmlEncode

2014-02-14 19:23 507 查看
<>



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> 这段字符串
        }
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐