zoukankan      html  css  js  c++  java
  • HtmlEncode是做什么的?

    编码中文 unicode字符到 html 编码格式的。
    
    比如 你在浏览器中 输入 http://hi.biadu.com/你想干什么/这样感觉不好
    
    
    这时就需要用
    string url = Server.HTMLEncode( "http://hi.biadu.com/你想干什么/" ) ;
    然后就可以用下面语句来跳到那个网页上去。
    Server.Redirect(url);
    
    编码后的中文字符都会变成 %CE%D2%CA%C7&什么的,
    你试一下就知道了
    
    
    另外就是 可以把<  > 等不安全的字符串改成 html编码, 这样在客服端呈现出来的时候才能避免不正常的显示。
    
    string url = Server.HTMLEncode( "<input type = input value=hahahha>" ) ;
    
    textBox1.text = url;
    这是MNSDN的解释
    The HTMLEncode method applies HTML encoding to a specified string. This is useful as a quick method of encoding form data and other client request data before using it in your Web application. Encoding data converts potentially unsafe characters to their HTML-encoded equivalent.
    
    If the string to be encoded is not DBCS, HTMLEncode converts characters as follows:
    
    The less-than character (<) is converted to <.
    
    The greater-than character (>) is converted to >.
    
    The ampersand character (&) is converted to &.
    
    The double-quote character (") is converted to ".
    
    Any ASCII code character whose code is greater-than or equal to 0x80 is converted to &#<number>, where <number> is the ASCII character value.
    
    If the string to be encoded is DBCS, HTMLEncode converts characters as follows:
    
    All extended characters are converted.
    
    Any ASCII code character whose code is greater-than or equal to 0x80 is converted to &#<number>, where <number> is the ASCII character value.
    
    Half-width Katakana characters in the Japanese code page are not converted.
    几种 HtmlEncode 的区别

    问题:

    HttpUtility.HtmlDecode ,HttpUtility.HtmlEncode 与 Server.HtmlDecode ,Server.HtmlEncode 与 HttpServerUtility.HtmlDecode , HttpServerUtility.HtmlEncode 有什么区别?

    他们与下面一般手工写的代码有什么不一样的?

    public static string htmlencode(string str)  
     { 
            if (str == null || str == "") 
                return ""; 
            str = str.Replace(">", ">"); 
            str = str.Replace(" <", "<"); 
            str = str.Replace(" ", " "); 
            str = str.Replace("  ", "  "); 
            str = str.Replace("/"", """); 
            str = str.Replace("/'", "'"); 
            str = str.Replace("/n", " 
    "); return str; }

    答案:

    HtmlEncode: 将 Html 源文件中不允许出现的字符进行编码,通常是编码以下字符"<"、">"、"&" 等。

    HtmlDecode: 刚好跟 HtmlEncode 相关,解码出来原本的字符。

    HttpServerUtility 实体类的 HtmlEncode 方法 是一种简便方式,用于在运行时从 ASP.NET Web 应用程序访问 System.Web.HttpUtility.HtmlEncode 方法。HttpServerUtility 实体类的 HtmlEncode 方法 在内部使用 System.Web.HttpUtility.HtmlEncode 对字符串进行编码。

    Server.HtmlEncode 其实就是 System.Web.UI.Page 类封装的 HttpServerUtility 实体类的 HtmlEncode 方法; System.Web.UI.Page 类有这样的一个属性: public HttpServerUtility Server { get; }

    所以我们可以认为:
    Server.HtmlDecode = HttpServerUtility 实体类的 HtmlDecode 方法 = HttpUtility.HtmlDecode ;
    Server.HtmlEncode = HttpServerUtility 实体类的 HtmlEncode 方法 = HttpUtility.HtmlEncode ;

    他们只不过是为了调用方便,做了封装而已。

    在 ASP 中, Server.HTMLEncode Method 过滤的字符描述如下:

    如果字符串不是 DBCS 编码。这个方法将转换下面字符:

    less-than character (<)
    <

    greater-than character (>)
    >

    ampersand character (&)
    &

    double-quote character (")
    "

    Any ASCII code character whose code is greater-than or equal to 0x80
    &#, where is the ASCII character value.

    如果是 DBCS 编码

    • All extended characters are converted.
    • Any ASCII code character whose code is greater-than or equal to 0x80 is converted to &#, where is the ASCII character value.
    • Half-width Katakana characters in the Japanese code page are not converted.

    相关资料:

    Server.HTMLEncode Method
    http://msdn.microsoft.com/en-us/library/ms525347.aspx

    在ASP.net 中情况也类似

    下面是一个简单的替换测试代码,测试结果看之后的注释:

    protected void Page_Load(object sender, EventArgs e)
    {
    
        TestChar("<"); // 小于号    替换   <
        TestChar(">"); // 大于号    替换   >
        TestChar("'"); // 单引号    替换   '
        TestChar(" "); // 半角英文空格    不做替换
        TestChar(" "); // 全角中文空格    不做替换
        TestChar("&"); // &    替换   &
        TestChar("/""); // 英文双引号    替换   "
        TestChar("/n"); // 回车    不做替换
        TestChar("/r"); // 回车    不做替换
        TestChar("/r/n"); // 回车    不做替换
    }
    
    
    public void TestChar(string t)
    {
        Response.Write(Server.HtmlEncode(t));
        Response.Write("__");
        Response.Write(HttpUtility.HtmlEncode(t));
        Response.Write("
    "); }

    所以上面我们提到的常用替换方式还是非常有用的,他还处理了一些 HttpUtility.HtmlEncode 不支持的替换。

    public static string htmlencode(string str)
    {
        if (str == null || str == "")
            return "";
        str = str.Replace(">", ">");
        str = str.Replace(" <", "<");
        str = str.Replace(" ", " ");       // HttpUtility.HtmlEncode( 并不支持这个替换
        str = str.Replace("  ", "  ");     // HttpUtility.HtmlEncode( 并不支持这个替换
        str = str.Replace("/"", """);
        str = str.Replace("/'", "'");
        str = str.Replace("/n", " 
    "); // HttpUtility.HtmlEncode( 并不支持这个替换 return str; }

    我们使用 Reflector 查看 HttpUtility.HtmlEncode 的实现,我们就可以看到,它只考虑的五种情况,空格,回车是没有处理的:

    使用 Reflector 查看 HttpUtility.HtmlEncode 实现代码其中最重要的代码如下:

    public static unsafe void HtmlEncode(string value, TextWriter output)
    {
        if (value != null)
        {
            if (output == null)
            {
                throw new ArgumentNullException("output");
            }
            int num = IndexOfHtmlEncodingChars(value, 0);
            if (num == -1)
            {
                output.Write(value);
            }
            else
            {
                int num2 = value.Length - num;
                fixed (char* str = ((char*) value))
                {
                    char* chPtr = str;
                    char* chPtr2 = chPtr;
                    while (num-- > 0)
                    {
                        chPtr2++;
                        output.Write(chPtr2[0]);
                    }
                    while (num2-- > 0)
                    {
                        chPtr2++;
                        char ch = chPtr2[0];
                        if (ch <= '>')
                        {
                            switch (ch)
                            {
                                case '&':
                                {
                                    output.Write("&");
                                    continue;
                                }
                                case '/'':
                                {
                                    output.Write("'");
                                    continue;
                                }
                                case '"':
                                {
                                    output.Write(""");
                                    continue;
                                }
                                case '<':
                                {
                                    output.Write("<");
                                    continue;
                                }
                                case '>':
                                {
                                    output.Write(">");
                                    continue;
                                }
                            }
                            output.Write(ch);
                            continue;
                        }
                        if ((ch >= '/x00a0') && (ch < 'ā'))
                        {
                            output.Write("&#");
                            output.Write(((int) ch).ToString(NumberFormatInfo.InvariantInfo));
                            output.Write(';');
                        }
                        else
                        {
                            output.Write(ch);
                        }
                    }
                }
            }
        }
    } 

    参考资料:

    HttpUtility.HtmlDecode与Server.HtmlDecode区别
    http://topic.csdn.net/u/20090220/11/110c8079-1632-418a-b43b-3ddb2f0a06e2.html

    詳細解說幾個建置網站時常用的編碼方法
    http://blog.miniasp.com/?tag=/htmlencode

    用于 Silverlight 的 .NET Framework 类库HttpUtility.HtmlEncode 方法
    http://msdn.microsoft.com/zh-cn/library/system.windows.browser.httputility.htmlencode(VS.95).aspx

    HttpUtility.HtmlEncode() and HttpServerUtility.HtmlEncode() do not encode all non-ASCII characters
    https://connect.microsoft.com/VisualStudio/feedback/details/102251/httputility-htmlencode-and-httpserverutility-htmlencode-do-not-encode-all-non-ascii-characters?wa=wsignin1.0

       
    职业规划网    网购从这里开始 ( 物美价廉还等什么?!!! )    

    2012夏装新款薄纱拼接性感包臀显瘦party宴会礼服连衣裙子女配胸
    2012夏装新款韩版时尚雪纺皇冠ZUMA正品女装小衫短上衣
    2条包邮 春夏 韩版 糖果色运动休闲松紧腰大码短裤 沙滩裤 热裤
    简约字母韩版百搭露肩小性感随意范儿中长款长袖T恤
    春装 新款 女装豹纹丝绒百搭裙包臀裙打底裙迷你阔摆裙短裙半
    秋水伊人2012新款夏装连衣裙122102023专柜正品代购女裙子夏季新
    秋水伊人2012新款夏装连衣裙122102017专柜正品代购女裙子送礼品
    2012夏季新款大码女装裤夏女七九分弹力韩版潮显瘦打底裤包邮薄款
    春装2012新款 蕴熙韩版女装 修身款打底衫 女式圆领长袖T恤 包邮
  • 相关阅读:
    指令级并行:动态调度技术
    单纯形法的矩阵描述
    QTextEdit回车事件重写
    整数规划
    全退
    流水线分析例题
    操作系统期中复习思考题
    流水线技术概述
    中心极限定理
    大数定律
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2508584.html
Copyright © 2011-2022 走看看